Вопрос

Я читал о асинхронном рисунке на основе задач, и это звучит великолепно. Теперь у меня есть служба WCF, которая должна вызвать другие услуги WCF. Эти сервисы возвращают результат дальнего месте. Как Async может позвонить в эти услуги с новым шаблоном и ждать всех для завершения?

Это было полезно?

Решение

Редактировать: если вы только что получили методы beginxxx и endxxx, см. этот вопрос за то, как превратить тех в Task<T> Задачи - и потом Остальная часть моего ответа будет применимо.

В основном, вам нужно TaskFactory<T>.FromAsync(...).


Ты можешь использовать TaskEx.WhenAll, что в конечном итоге будет Task.WhenAll.

Обратите внимание, что это будет ждать все Задачи, чтобы закончить, даже если есть ошибка рано.

Поскольку задачи имеют разные типы результатов, вам нужно настроить их, чтобы начать с, дождитесь их всех, чтобы закончить, а затем возьми результаты:

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

В качестве альтернативы, просто уволить задачи, чтобы начать с, и жду каждого по отдельности. Обратите внимание, что задачи в кране «горячие» - они начинаются, как только вы их создаете, не когда вы их ждете. Так что это будет работать тоже - но на этот раз, если t1 бросает исключение, это не будет ждать t2 и t3 завершить:

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

Я провожу об этом, сначала о Ожидание нескольких задач в целом А потом о Исключения в ожидании нескольких задач.

Другие советы

Если вы хотите узнать о планах команды WCF, чтобы поддержать модель Async / a enait, взгляните на следующий пост блога:

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

Амадео

Видеть Async CTP - Как я могу использовать Async / ждут, чтобы позвонить в службу WCF?
Для примеров на Async клиентов и услуг. Или использовать Asyncwcflib, он поддерживает Модель программирования на основе актера И есть примеры услуг, вызывающих другие услуги внутри приложения или по сети.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top