異步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