私は現在3.5で立ち往生していますが、asyncbridgeをasync-awaitに使用しています。私たちは古いWCF非同期呼び出しをたくさん使っています。これを新しい非同期待機パターンにまとめたいと思います。WCF 3.5、AsyncBridge。 async-awaitをラップする
// async is wrong
public /*async*/ Task<ScannedDocumentResult> GetScannedDocumentsTask(String assignmentId)
{
TaskCompletionSource<ScannedDocumentResult> tcs = new TaskCompletionSource<ScannedDocumentResult>();
EventHandler<GetScannedDocumentsCompletedEventArgs> handler = null;
handler = (o, e) =>
{
if (e.UserState != tcs)
return;
if (e.Error != null)
tcs.SetException(e.Error);
else if (e.Cancelled)
tcs.SetCanceled();
else
tcs.SetResult(e.Result);
GetScannedDocumentsCompleted -= handler;
};
GetScannedDocumentsCompleted += handler;
GetScannedDocumentsAsync(assignmentId, tcs);
return tcs.Task;
}
3.5 WCFプロキシにgeneretedは次のとおりです:
何かが私に語っ
GetScannedDocumentsAsync GetScannedDocumentsCompleted GetScannedDocumentsEventArgsこれを行うことができることを次のように
私はこれをラップしています多くのクリーナー、私は何かを逃したことがありますか?
また、このメソッドはasyncをまったく実行しますか? async演算子でコンパイルするとエラーが発生します。
'GetScannedDocumentsAsync'は' IAsyncResult'を返しますか?もしそうなら、[this](http://blogs.msdn.com/b/pfxteam/archive/2011/06/27/10179452.aspx)の優れたブログ記事では、それを正しく行う方法が説明されています。 – Noseratio
'async'はその中に' await'を持つメソッドでのみ許可されます。 'GetScannedDocumentsAsync'の定義は何ですか? –
実際に非同期で実行するメソッドに 'async'が必要だと思うのであれば、' async'の意味を実際に理解していません。あなたはおそらくそれについてもっと読むべきです。 – svick