2016-10-15 10 views
1

私はAsync関数を初めて使用しています。 Async関数から値を返すコードを書いて、それをコンソールに出力します。コードを実行すると、はDim result As Integer = Await taskになります。理由はわかりません。これは私のコードです:Awaitタスクで例外がスローされました

Module Module1 
    Sub Main() 
     Dim task = New Task(AddressOf testAync) 
     task.Start() 
     task.Wait() 
    End Sub 

    Async Sub testAync() 
     Dim task As Task(Of Integer) = HandleFileAsync(9000) 
     Dim result As Integer = Await task 
     Console.WriteLine(result) 
     Console.ReadLine() 
    End Sub 

    Async Function HandleFileAsync(ByVal x As Integer) As Task(Of Integer) 
     Return Await Task.Run(aFunction(x)) 
    End Function 

    Public Function aFunction(ByVal intIn) 
     Return intIn 
    End Function 
End Module 

答えて

3

あなたの問題は、同期機能aFunctionの実行を待っているHandleFileAsync、です。私はあなたが明示的にあなたのパラメータを入力してその関数の値を返さない理由を確かではありませんが、終わりにはあなたの問題には関係しませんので無視します。

aFunctionは非同期ではないため、待機する必要はなく、タスクを作成する必要はありません。あなたのエラーは、Task.Run(aFunction(x))が非同期Actionを期待しているか、または非同期Taskを返す関数です。

単に以下にHandleFileAsyncを変更します。

Async Function HandleFileAsync(ByVal x As Integer) As Task(Of Integer) 
    Return aFunction(x) 
End Function 
関連する問題