Нужен исчерпывающий пример C# System.Threading.Tasks

Я пытался выяснить, как использовать System.Threading.Tasks для асинхронного вызова синхронного метода WCF, поддерживая отмену, обработку ошибок, возврат результата и несколько продолжений.

Я наткнулся на несколько незавершенных демонстраций, но все они, похоже, немного отстают. Например, я не могу использовать кооперативную отмену, поскольку все мои методы WCF являются атомарными и относительно долгоживущими.


person Louis S. Berman    schedule 07.07.2010    source источник
comment
Задачи требуют навязчивой асинхронной поддержки в вашем целевом коде (пользовательском или другом), чтобы включить все эти функции, особенно отмену. Вы можете создать синхронный метод из асинхронного, но вы не можете сделать это наоборот, не изменяя (возможно, рефакторинг) код.   -  person Merlyn Morgan-Graham    schedule 05.09.2011


Ответы (2)


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

Преимущество заключается в том, что вы не будете блокировать поток в пуле рабочих потоков (как это будет делать System.Threading.Tasks), и вам не нужно беспокоиться о том, чтобы попытаться выяснить, как отменить синхронный вызов WCF в вашем рабочем потоке. нить.

Есть ли причина, по которой вы должны сделать синхронный вызов WCF?

person Sam    schedule 07.07.2010
comment
Спасибо за ваш быстрый ответ. К сожалению, я использую собственный прокси-сервер, поэтому я не могу использовать собственный асинхронный WCF... - person Louis S. Berman; 08.07.2010

Если бы вы объяснили, что вы делаете немного больше, это могло бы помочь.

Однако вы, кажется, говорите, что вам нужна асинхронная версия синхронного вызова, и это не то, о чем Задачи.

Обработка на основе задач заключается в том, чтобы сделать асинхронный вызов похожим на синхронный. Не действуйте так, просто код выглядит так, как он работает.

person barbary    schedule 12.09.2011