2016-11-18 11 views
-1

私はここで質問を調べましたが、私が見ているのは単純な理論BSです。だからここに私のシナリオです:私たちは新しいアプリケーションと1つの自分の古いシステムで消費者を甘やかす。したがって、評価が特定の状態に達したときのシステムでは、すべてのデータをサービスに送信する必要があります。返された複数のタスクを処理するにはどうすればいいですか<response>

最初の部分は単純です:レコードからデータを取得し、それをデータ管理に入れ、データを送信します。しかし、2番目の部分は、すべてのサポート文書を送信する必要があるため、滑りやすい場所です。実際の世界のケースでは、私は紹介文書、評価文書、および結果の要約を持っています。だから私のメインのコードで私はこれを言っている:

if (client.ReferralDocument != null) 
    response = TransmitDocumentAsync(client.ReferralDocument); 
if (client.Assessment != null) 
    response = TransmitDocumentAsync(client.Assessment); 
if (cilent.Summary != null) 
    response = TransmitDocumentAsync(client.Summary); 

今と呼ばれる方法が非同期であり、それはだから私は基本的に「壁にわたって」それらの文書をスローすることができる午前単に

public static async Task<Response> TransmitDocumentAsync(byte[] document) 
{ 
    InterimResponse x = await proxy.InsertAttachmentAsync(document, identifier); 
    return new Task<Response>(new Response(InterimResponse); 
} 

です待機せずにアップロードすることができます。しかし、私が執着しているのは、返されたオブジェクトをどのように扱うか、どのドキュメントをどのように結びつけているかを知ることです。

返されたエラーを処理するために3つの呼び出しの後に追加する必要があるのは、他に何か問題や例外が発生した場合です。私はちょうどその帰りに待っていますか?私は3つの戻りオブジェクト(referalResponse、assessmentResponse、summaryResponse)を持っていて、それぞれについて待っていますか?私はこれを熟考し、結果を気にせずに物事を終了させますか? :)

+0

'await Task.WhenAll(tasks)'? –

答えて

2

一度にそれらを1つずつawaitしたい場合:

if (client.ReferralDocument != null) 
    await TransmitDocumentAsync(client.ReferralDocument); 
if (client.Assessment != null) 
    await TransmitDocumentAsync(client.Assessment); 
if (cilent.Summary != null) 
    await TransmitDocumentAsync(client.Summary); 

あなたがそれらすべてを発行したい場合は、同時に、その後awaitすべての応答:

var responses = new List<Task>(); 
if (client.ReferralDocument != null) 
    responses.Add(TransmitDocumentAsync(client.ReferralDocument)); 
if (client.Assessment != null) 
    responses.Add(TransmitDocumentAsync(client.Assessment)); 
if (cilent.Summary != null) 
    responses.Add(TransmitDocumentAsync(client.Summary)); 
Response[] r = await Task.WhenAll(responses); 

補足として、TransmitDocumentAsyncが間違っています。 new Taskを作成してはならず、new Responseのみを作成してください。

関連する問題