Domanda

Ho letto sul modello asincrono basato su attività e sembra grande. Ora, ho un servizio WCF che ha bisogno di chiamare altri servizi WCF. Tali servizi restituiscono differnet risultato. Come può asincrona chiamare tali servizi con il nuovo modello e aspettano tutti per completare?

È stato utile?

Soluzione

EDIT: Se hai appena avuto metodi BeginXXX e EndXXX, vedi questa domanda per come trasformare quelli in attività Task<T> -. e poi il resto della mia risposta sarà applicabile

In sostanza, è necessario TaskFactory<T>.FromAsync(...) .


È possibile utilizzare TaskEx.WhenAll, che alla fine sarà Task.WhenAll.

Si noti che questo attenderà tutti i compiti alla fine, anche se c'è un errore iniziale.

Per quanto i compiti sono diversi tipi di risultato, è necessario configurarli per cominciare, attesa per tutti loro alla fine, poi prendete i risultati:

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

In alternativa, basta sparare i compiti per cominciare, e aspettano ciascuno separatamente. Si noti che le attività in TAP sono "caldo" - cominciano non appena li si crea, non quando li attendono. Quindi questo funzionerà anche - ma questa volta se t1 genera un'eccezione, è non attesa per t2 e t3 al completo:

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

Ho bloggato su questo, in primo luogo circa in attesa di più attività in generale e poi su eccezioni quando in attesa di più attività .

Altri suggerimenti

Se si desidera conoscere i piani della squadra WCF per sostenere il modello / await asincrona, date un'occhiata al seguente post del blog:

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

Amadeo

Async CTP - Come posso usare asincrona / await di chiamare un servizio WCF
? per gli esempi sui client e servizi asincrone. Oppure utilizzare AsyncWcfLib , supporta un Attore basato modello di programmazione e ha esempi di servizi di chiamata di altri servizi all'interno di un'applicazione o sulla rete.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top