C # ThreadPool или BeginInvoke без EndInvoke - PullRequest
1 голос
/ 04 октября 2011

В сети очень разные мнения о том, как реализовать схему «огонь и забыть».

Некоторые говорят, что нет необходимости вызывать BeginInvoke без вызова EndInvoke, если нужно реализовать шаблон «забей и забудь».

Другие говорят, что лучше создать отдельный объект ThreadPool. Меня беспокоит стоимость инициализации ThreadPool. В частности, вызываемый метод только добавляет объект в очередь и затем возвращает.

Для этого "быстрее" создать поток в пуле или просто вызвать метод синхронно? Я хотел бы знать приблизительный порог работы, который стоит дороже, чем создание потока в пуле.

Есть ли какая-либо документация по этому вопросу, а как насчет того, чтобы ловить исключение в пуле и других ресурсах с ним?

1 Ответ

2 голосов
/ 04 октября 2011

При использовании ThreadPool вы не «создаете поток в пуле», вы используете уже существующий поток или ждете, пока он не станет доступным.

Только когда много заданий ожидает, Пул добавит другой поток, но тогда этот будет хорошо использован.

Еще лучше использовать Задачи (Fx4 и выше).

...