Я читал об асинхронном шаблоне, основанном на задачах, и это звучит здорово. Теперь у меня есть служба WCF, которая должна вызывать другие службы WCF. Эти службы возвращают результат differnet. Как можно переадресовать эти службы с помощью нового шаблона и ждать завершения?WCF вызов службы async другие услуги WCF
ответ
EDIT: Если вы только что получили BeginXXX и EndXXX методы, см this question о том, как превратить эти в 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
Я уже писал об этом, в первую очередь о waiting for multiple tasks in general, а потом о exceptions when waiting for multiple tasks ,
Если вы хотите знать о планах команды WCF для поддержки модели асинхронных/ОЖИДАНИЯ, посмотрите на следующий блоге:
Амадео
См Async CTP - How can I use async/await to call a wcf service?
для примеров асинхронных клиентов и сервисов. Или используйте AsyncWcfLib, он поддерживает Actor based programming model и имеет примеры услуг, вызывающих другие услуги внутри приложения или по сети.
- 1. WCF потребляет другие услуги REST?
- 2. Вызов службы async WCF при выдаче олицетворения
- 3. Реализация службы async WCF
- 4. Вызов службы WCF из другой службы WCF
- 5. вызов wcf 4.5 службы WCF асинхронно
- 6. WCF Вызов службы из службы
- 7. Как отменить вызов async WCF?
- 8. Вызов службы wcf из другой службы WCF вызывает вызов
- 9. вызов службы WCF
- 10. Аутентифицировать вызов службы WCF
- 11. Динамический вызов службы WCF
- 12. Вызов службы WCF - активация службы
- 13. Как реализовать концепцию службы WCF, которая инкапсулирует другие службы WCF?
- 14. Мгновенный вызов и вызов службы WCF Асинхронно
- 15. WCF - подтверждение услуги клиенту
- 16. wcf ria услуги хостинга
- 17. Вызов Webservice из службы WCF
- 18. Как обеспечить услуги wcf
- 19. Как определить первый вызов услуги singleton WCF?
- 20. Вызов службы WCF из другой ошибки вызывают WCF службы
- 21. как обезопасить свои услуги службы WCF Data
- 22. WCF успокоительной ошибки службы, потребляя услуги
- 23. вызов async на стороне сервера WCF
- 24. WCF-услуги, потребляющие
- 25. Услуги по обновлению WCF
- 26. Услуги WCF по серверам
- 27. Вызов службы WCF через https
- 28. Вызов службы WCF вызывает TypeLoadException
- 29. вызов службы wcf дважды вызываемый
- 30. Хостинг службы WCF Вызов WinForm
Спасибо за ваш ответ , но я не все понял. Я думаю, сервис1, service2 и service3 являются прокси-клиентами для этих услуг. DoFirstTaskAsync, DoSecondTaskAsync и DoThirdTaskAsync - это методы этих служб. Но методы не возвращают Task или Task, они возвращаются IList , а также подписи для методов IAsyncResult BeginSomthing и IList EndSomthing (для реализации асинхронного шаблона) Где я неправ? –
Mirko
@Mirko: Будет редактировать. –