Vra

Ek het gelees oor die taakgebaseerde asynchrone patroon en dit klink groot. Nou ja, ek het 'n BWF diens wat behoeftes te noem ander WCF dienste. Diegene dienste terugkeer differnet gevolg. Hoe kan asinkroniseer daardie dienste te bel met die nuwe patroon en wag al te voltooi?

Was dit nuttig?

Oplossing

EDIT: As jy net het BeginXXX en EndXXX metodes, sien hierdie vraag vir hoe om diegene in Task<T> take te draai -. en dan die res van my antwoord sal van toepassing wees

In beginsel, moet jy TaskFactory<T>.FromAsync(...) .


Jy kan gebruik TaskEx.WhenAll, wat uiteindelik Task.WhenAll sal wees.

Let daarop dat dit sal wag vir alle die take te voltooi, selfs al is daar 'n fout vroeg.

As die take het verskillende tipes gevolg, wat jy nodig het om hulle te rig om mee te begin, wag vir hulle almal tot die einde, dan gryp die resultate:

var t1 = service1.DoFirstTaskAsync();
var t2 = service2.DoSecondTaskAsync();
var t3 = service3.DoThirdTaskAsync();

await TaskEx.WhenAll(t1, t2, t3);

var result1 = t1.Result;
var result2 = t2.Result;
var result3 = t3.Result;

// Use the results

As alternatief, net brand af die take te begin met, en wag elkeen afsonderlik. Let daarop dat take in TAP is "warm" - hulle begin sodra jy hulle maak, nie wanneer jy hulle wag. So dit sal ook werk - maar hierdie keer as t1 gooi 'n uitsondering, dit nie wag vir t2 en t3 te voltooi:

var t1 = service1.DoFirstTaskAsync();
var t2 = service2.DoSecondTaskAsync();
var t3 = service3.DoThirdTaskAsync();

var result1 = await t1;
var result2 = await t2;
var result3 = await t3;

// Use the results

Ek het blog oor hierdie, eerste oor wag vir verskeie take in die algemeen en dan oor uitsonderings toe wag vir verskeie take .

Ander wenke

As jy wil weet oor die planne van die BWF span om die asinkroniseer / Wag model ondersteun, 'n blik op die volgende blog post:

http://blogs.msdn.com/b/endpoint/archive/2010/11/13/simplified-asynchronous-programming-model-in-wcf-with-async-await.aspx

Amadeo

A-sinkroniseer CTP - Hoe kan ek asinkroniseer / wag om te 'n BWF diens noem
? vir voorbeelde op asinkroniseer kliënte en dienste. Of gebruik AsyncWcfLib , dit word ondersteun deur 'n die akteur gebaseer programmering model en het voorbeelde van dienste roeping ander dienste in 'n aansoek of oor die netwerk.

Gelisensieer onder: CC-BY-SA met toeskrywing
Nie verbonde aan StackOverflow
scroll top