2017-12-08 1 views
0

Ich habe Code:Await Aufgabe außerhalb der Anweisung using

Task<string> pageIdTask; 
using (var seedSession = this.dbSessionManager.Start(agencyId)) 
{ 
    pageIdTask = seedSession.Query<ModelInfo>() 
       .Where(mi=> mi.Id == modelId) 
       .Select(mi=> mi.Tag) 
       .SingleAsync(); 
} 

var tokenTask = this.tokenManager.GetAsync(agencyId); 

await Task.WhenAll(pageIdTask, tokenTask); 

string pageId = pageIdTask.Result; 
var token = tokenTask.Result; 

Ist es richtig? Ich meine, ist es in Ordnung, auf Task zu warten, wenn es mit Statement initialisiert wurde?

Oder besser zu warten Aufgabe bei der Verwendung von Anweisung?

+6

Unter der Annahme, dass 'seedSession' etwas wie Entity Framework läuft oder was auch immer intern, du bist Bevor ich die Aufgabe erledige, wird das schlecht enden. – DavidG

+0

@DavidG, na ja, du hast Recht ... Ich habe es nur im Komponententest getestet, aber sameSession wurde verspottet. .. also ja. Vielen Dank – demo

Antwort

2

Es gibt keine technische Einschränkung beim Erstellen einer Aufgabe, die im Rahmen einer using() -Anweisung außerhalb davon erstellt wird. In den meisten Fällen hängt die Logik der Aufgabe jedoch davon ab, was innerhalb der jetzt verwendeten using() -Einheit lag. So im Allgemeinen so etwas wie das ist ok:

Task task; 
using(var something = GetSomething()){ 
    task = otherThing.CompletelyUnrelatedLogic(); 
} 
task.Wait(); // no prob 

Aber in den meisten Fällen tatsächlich aussehen wird:

Task task; 
using(var something = GetSomething()){ 
    task = something.TaskThatWillFailAndExplodeIfExecutedWhenSomethingIsDisplosed(); 
} 
task.Wait(); // BOOM 
Verwandte Themen