2016-11-18 2 views
-1

Ich habe die Fragen hier durchsucht und alles, was ich sehe, sind einfache theoretische BS. Also hier ist mein Szenario: Wir haben eine neue Anwendung und einen verwöhnten Verbraucher mit einem eigenen älteren System. Wenn also in unserem System eine Bewertung einen bestimmten Zustand erreicht, müssen wir alle Daten an ihren Dienst übermitteln.Wie handle ich mehrere zurückgegebene Aufgabe <response>

Der erste Teil ist einfach: Holen Sie sich die Daten aus dem Datensatz, legen Sie sie in ihre Datenverträge und senden Sie die Daten an sie. Aber der zweite Teil ist dort, wo es rutschig wird, weil es verlangt, alle unterstützenden Dokumente zu senden. In einem realen Fall habe ich ein Überweisungsdokument, ein Beurteilungsdokument und eine Zusammenfassung von Befunden. Also in meinem Haupt-Code ich sage dies gerade:

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

nun so genannte Methode ist asynchron und es ist einfach

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

So wirft ich bin in der Lage, im Grunde diese Dokumente ‚über die Mauer‘ ohne Warten hochgeladen werden. Aber was ich festhalte, ist, wie ich mit den zurückgegebenen Objekten umgehe und woher weiß ich, an welches Dokument es gebunden ist?

Was ich frage ist, was ich nach den drei Aufrufen hinzufügen muss, um alle zurückgegebenen Fehler sowie alle anderen auftretenden Probleme oder Ausnahmen zu behandeln? Warte ich nur auf die Rückkehr? Verfüge ich über 3 Rückgabeobjekte (referalResponse, assessmentResponse, summaryResponse) und warte auf jeden einzelnen? Übertreibe ich das und lasse einfach die Dinge ohne Rücksicht auf die Ergebnisse zu Ende? :)

+0

'erwarten Task.WhenAll (Aufgaben)'? –

Antwort

2

Wenn Sie wollen, dass sie einer nach dem anderen 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); 

Wenn Sie sie alle, ausgegeben werden soll und dann await alle Antworten zur gleichen Zeit:

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); 

Nebenbei bemerkt ist Ihre TransmitDocumentAsync nicht korrekt. Es sollte keine , nur die new Response.

Verwandte Themen