5

仕事で私は現在 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 演算子を使用してコンパイルすると、エラーが発生するだけです。

4

1 に答える 1