Pregunta

He leído sobre el modelo asincrónico basado en tareas y suena genial. Ahora, tengo un servicio WCF que tiene que llamar a otros servicios WCF. Esos servicios de retorno differnet resultado. ¿Cómo se puede llamar a esos servicios asíncrono con el nuevo patrón y esperar todo para completar?

¿Fue útil?

Solución

EDIT: Si usted acaba de conseguir métodos BeginXXX y EndXXX, ver esta pregunta de cómo convertir los en tareas Task<T> -. y después el resto de mi respuesta será aplicable

Básicamente, necesita TaskFactory<T>.FromAsync(...) .


Puede utilizar TaskEx.WhenAll, que finalmente será Task.WhenAll.

Tenga en cuenta que esto va a esperar a que todos las tareas a fin, incluso si hay un error antes de tiempo.

A medida que las tareas tienen diferentes tipos de resultados, usted necesita para ponerlos en marcha para empezar, espera a que todos ellos hasta el final, a continuación, coger los resultados:

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

Como alternativa, sólo disparar las tareas para empezar, y esperar cada uno por separado. Tenga en cuenta que las tareas de TAP son "calientes" - que se inicia tan pronto a medida que los crea, no cuando se les espera. Así que esto funcionará también - pero esta vez si t1 lanza una excepción, no espera para t2 y 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

He escribió en su blog acerca de esto, primero acerca de esperando para múltiples tareas en general y luego sobre el excepciones cuando se espera para múltiples tareas .

Otros consejos

Si usted quiere saber acerca de los planes del equipo de WCF para apoyar el modelo asíncrono / esperan, echar un vistazo a la siguiente entrada en el blog:

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

Amadeo

asíncrono CTP - ¿Cómo puedo utilizar asíncrono / aguardan para llamar a un servicio WCF
? para ejemplos de clientes y servicios asincrónicos. O uso AsyncWcfLib , soporta un Actor basada modelo de programación y tiene ejemplos de servicios de llamadas de otros servicios dentro de una aplicación o en la red.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top