仕事で私は現在 3.5 で立ち往生していますが、async-await に asyncbridge を使用しています。多くの古い WCF 非同期呼び出しを使用しており、これを新しい 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 プロキシで生成されます。
GetScannedDocumentsAsync GetScannedDocumentsCompleted GetScannedDocumentsEventArgs
これはもっときれいにできると何かが教えてくれますが、何か重要なことを見逃していませんか?
また、このメソッドはまったく非同期で実行されますか? async 演算子を使用してコンパイルすると、エラーが発生するだけです。