Вызов службы WCF асинхронно с другими службами WCF - PullRequest
2 голосов
/ 04 ноября 2010

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

Ответы [ 3 ]

3 голосов
/ 04 ноября 2010

РЕДАКТИРОВАТЬ: Если вы только что получили методы 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

В качестве альтернативы, просто запустите задачи, с которых нужно начать, и ждите каждую из них отдельно.Обратите внимание, что задачи в TAP «горячие» - они запускаются, как только вы их создаете, а не когда вы их ожидаете.Так что это тоже будет работать - но на этот раз, если 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

I 'Мы писали об этом, сначала о ожидании нескольких задач в целом , а затем о исключениях при ожидании нескольких задач .

1 голос
/ 13 ноября 2010

Если вы хотите узнать о планах команды WCF по поддержке модели async / await, посмотрите следующее сообщение в блоге:

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

Амадео

0 голосов
/ 05 апреля 2012

См. Async CTP - Как я могу использовать async / await для вызова службы wcf?
примеры асинхронных клиентов и сервисов. Или используйте AsyncWcfLib , он поддерживает модель программирования на основе актера и содержит примеры служб, вызывающих другие службы внутри приложения или по сети.

...