异步Sub
这样的:异步lambda表达式中VB.NET
Dim f As Func(Of Task) = Async Sub()
End Sub
可生产编译器错误:
error BC36670: Nested sub does not have a signature that is compatible with delegate 'System.Func(Of System.Threading.Tasks.Task)'.
等效C#代码编译罚款:
Func<Task> f = async() => { };
Async Sub
改写成Async Function
使代码有效。
为什么Async Sub()
不能转换为返回值类型为Task
的委托类型?
VB.NET'Function'实际上意味着某些值将从方法返回。在上面的代码中没有返回值,所以lambda-'Function'实际上应该是lambda-'Sub“。你有没有在VB.NET中看到没有'Return'语句的'Function'? – ControlFlow 2012-04-20 12:14:08
@ControlFlow C#等价物确实返回一个值,并且该值是一个“任务”。该任务的返回是隐含的:你没有'return'语句,但你确实返回了一些东西。在VB.NET中是一样的。 – hvd 2012-04-20 12:15:52
@hvd我认为问题是,虽然C#'async'关键字用于将'void'函数的声明转换为'Func',但在VB.NET中出现'Async' ** not **宣布一个“Sub”成同样的东西。请注意,在C#示例中,我们可以采用'()=> {}'(它不返回任何内容,因此对应于VB.NET'Sub'),并通过预先将其分配给'Func ' 'async' - 类似的过程出现* not *在VB.NET中工作。无论如何,我认为这是个问题。 –
AakashM
2012-04-20 12:22:53