WCF llamada de servicio asíncrono otros servicios WCF
-
28-09-2019 - |
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?
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:
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.