【问题标题】:Conversion of code from vb.net to c#- await task将代码从 vb.net 转换为 c#-await 任务
【发布时间】:2012-12-14 16:16:49
【问题描述】:

我已经愉快地使用以下代码行了一段时间,它似乎令人满意地完成了这项工作。我希望将其转换为 C#。我正在尝试转换:

Dim result as string = Await Task(Of String).Factory.StartNew(Function() MyClass.PerformJob(param1,param2,param3))

我在 C# 中输入以下代码:

string result = await Task<string>.Factory.StartNew((Func<string>) MyClass.PerformJob((param1,param2,param3));

这会产生以下错误:

'Cannot convert type 'string' to 'System.Func<string>' 

我认为这与以我的方式传递参数有关;我不知道为什么这应该在 VB.NET 而不是 C# 中工作?

非常感谢您的帮助。

【问题讨论】:

    标签: c# wpf vb.net async-await


    【解决方案1】:

    假设PerformJobFunc&lt;string&gt;,我认为您不需要Func&lt;string&gt; 演员表。

    string result = await Task<string>.Factory.StartNew(MyClass.PerformJob(param1,param2,param3));
    

    【讨论】:

      【解决方案2】:

      当结果类型为string 时,您正试图将MyClass.PerformJob 方法的结果转换为Func&lt;string&gt;。使用这个:

      string result = await Task<string>.Factory
          .StartNew(() => MyClass.PerformJob(param1,param2,param3));
      

      【讨论】:

        【解决方案3】:

        您不需要将其强制转换为 Func,并且您可能需要使用 lambda 将参数放入 PerformJob 调用中。试试这个。

        string result = await Task<string>.Factory.StartNew(() => MyClass.PerformJob(param1,param2,param3));
        

        【讨论】:

          【解决方案4】:

          您必须将 'MyClass' 替换为 'this' - C# 没有严格等效于 'MyClass':

          string result = await Task<string>.Factory.StartNew(() => this.PerformJob(param1,param2,param3));
          

          【讨论】:

          • vb.net 也没有,它是 OP 给他们创建的类的名称。您正在考虑使用 My Namespace 或 Me 来代替 this。
          • 否 - 'MyClass' 是 VB 中的关键字,与 'Me' 的含义非常相似,但略有不同。 (查一下)。
          • 我猜想在使用 Vb.net 超过 12 年之后从未使用过它。它一定不会那么常见。感谢您的信息。 :)
          • 你是对的——这并不常见。这是 VB 编程语言发展过程中“除了厨房水槽之外的所有东西都扔进去以防万一”的想法之一。
          • 如前所述,MyClass 只是(事后看来是一个错误的命名选择!)我给一个班级起的名字。
          猜你喜欢
          • 2016-12-17
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2017-07-14
          相关资源
          最近更新 更多