小编Eri*_*sen的帖子

将 C# 异步 Lambda 方法分配给作为任务类型的变量

这在 C# 中可能吗?以下代码产生编译器错误。

HashSet<Task<(string Value, int ToNodeId)>> regionTasks =
  new HashSet<Task<(string Value, int ToNodeId)>>();
foreach (Connection connection in Connections[RegionName])
{
    regionTasks.Add(async () =>
    {        
        string value = await connection.GetValueAsync(Key);
        return (value, connection.ToNode.Id);
    }());
}
Run Code Online (Sandbox Code Playgroud)

C# 编译器抱怨“错误 CS0149:应为方法名称。” 无法推断 lambda 方法的返回类型。

请注意我在 lambda 块关闭后立即通过 () 调用 lambda 方法的技术 {}。这确保Task返回 a ,而不是 a Func

VB.NET 编译器理解这种语法。我惊讶地发现 VB.NET 编译器胜过 C# 编译器的示例。有关完整故事,请参阅我的An Async Lambda Compiler Error Where VB Outsmarts C#博客文章。

Dim regionTasks = New HashSet(Of Task(Of (Value As String, …
Run Code Online (Sandbox Code Playgroud)

c# vb.net asynchronous task anonymous-function

5
推荐指数
1
解决办法
697
查看次数

标签 统计

anonymous-function ×1

asynchronous ×1

c# ×1

task ×1

vb.net ×1