WCF: Безопасно ли создавать асинхронный рабочий поток на сервере? - PullRequest
3 голосов
/ 10 февраля 2010

У меня есть метод службы WCF, который я хочу выполнить какое-то действие асинхронно (так что есть небольшая дополнительная задержка в возвращении вызывающей стороне). Безопасно ли порождать System.ComponentModel.BackgroundWorker внутри метода? На самом деле я бы использовал его для вызова одного из других сервисных методов, поэтому, если бы был способ вызвать один из них асинхронно, это сработало бы.

Является ли BackgroundWorker подходом, или есть лучший способ или проблема с этим в службе WCF?

1 Ответ

5 голосов
/ 10 февраля 2010

BackgroundWorker действительно больше подходит для использования в пользовательском интерфейсе. На сервере вы должны вместо этого использовать ThreadPool.

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

Обычно BackgroundWorker обсуждается, когда фоновое задание должно выполняться приложением с графическим интерфейсом. Например, страница MSDN для System.ComponentModel.BackgroundWorker специально относится к случаю использования пользовательского интерфейса:

Класс BackgroundWorker позволяет запускать операцию в отдельном выделенном потоке. Отнимающие много времени операции, такие как загрузка и транзакции с базой данных, могут привести к тому, что пользовательский интерфейс (UI) будет выглядеть так, как будто он перестал отвечать во время работы. Если вам нужен отзывчивый пользовательский интерфейс и вы сталкиваетесь с длительными задержками, связанными с такими операциями, класс BackgroundWorker предоставляет удобное решение.

Это не означает, что он не может использоваться на стороне сервера, но цель класса предназначена для использования в пользовательском интерфейсе.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...