私は、顧客データを取得するのに時間がかかる可能性のある機能を持つ既存のDLLを持っています。今まではUIのロックを防ぐために良い古いthreading.thread.startメソッドを使用していましたが、私は.net 4.5のAwait/Asyncメソッドを頭に入れようとしていました。 これらの関数の周りにAwaitラッパーを作成する簡単な方法はありますか?私はdllを4.5に更新できますが、コード自体の構造を変更することはできません。すべて私がのエラーに結果を試してみてください。.. ブール.net既存の/古いコードで待つ
が例のコードは「適しGetAwaiterメソッドを持っている 『』待っていますが、その型を必要とし」....私は理解していない何
Public Async Function GetByID(id As Integer) As Task(Of Boolean)
'serviceBase is a dll with a number of functions for getting
'data that returns true when a customer object has been filled
Return Await ServiceBase.GetCustomer(id)
End Function
があります私がServiceBaseでGetCustomerを更新できるのであれば、それを非同期としてマークし、(Booleanの)タスクを返さなければなりません。しかし、GetCustomerはいつでもAwaitを使用する必要がないため、エラーが発生します。これは、ブロックされたUIに合計で追加される多数の小さなプロセスです。
は、実際には非同期操作を、顧客を得るための行為ですか?同期メソッド 'Async'を作成することに意味はありません。代わりにGetCustomerにコードを表示できますか?この場合、もっと面白いです。 「ブール などの公共機能GetCustomer(整数としてID)GetFromSourceA(ID)なら、 」 – kai
その関数の例(顧客は、例えばソースA&Cの詳細を持つことができる) は、顧客とのいくつかの作業を行うと、真 を返します 場合GetFromSourceB(ID)が続い は「顧客とのいくつかの作業を行うと 場合GetFromSourceC(ID)が続い がいる場合、真 終了を返すの顧客とのいくつかの作業を行うと 場合IsNothing(顧客)次に戻るならば真 終了を返すと終了False Trueを返す 終了関数 ' – user3334804
@kaiとは、それが 'GetCustomer'タスクを返し、 'Await GetCustomer'を呼び出すことは自動的に非同期にすることではありません。 'async/await'は、*すでに*非同期メソッドのために*待っている構文砂糖です。たとえば、 'GetCustomer'がWebサービスを呼び出す場合、' Await client.CallThatMethodAsync'を使用して非同期にサービスメソッドを呼び出し、 'client.CallThatMethod'を同期的に呼び出すのではなく結果を得ることができます。 DBアクセスメソッドの場合は、ExecuteReaderの代わりにExecuteReaderAsyncを使用することができます –