Как работает параллельная библиотека задач .NET с задачами блокировки? В библиотеке C++ Concrt у вас есть метод Context::Oversubscribe
, но я не нашел такого в библиотеке .NET? Является ли опция LongRunningTask
соответствующим способом обработки задач блокировки?Задача параллельной библиотеки - блокировка операций?
.i.e: в C++ вы могли бы сделать:
auto my_task_func = []
{
//Do work...
Context::Oversubscribe(true);
// Short or long blocking op.
Context::Oversubscribe(false);
//Do more work.
}
«ThreadPool» (который используется TPL за кулисами) также получает уведомления о том, что один из его потоков начал блокировать и использует эту информацию, чтобы решить, когда создавать новые потоки. – svick
svick, хороший комментарий. Я также думаю, что это правда, хотя и не документировано. Кажется, я не могу найти ссылку на это прямо сейчас. – usr
Я не знаю, является ли это на самом деле документом, но мой источник - это * CLR через C# *, 3-е издание, стр. 759: «Однако, если какой-либо из этих потоков добровольно блокирует [...], тогда Windows уведомляет пул потоков, что один из его потоки перестали работать. Теперь пул потоков [...] создает новый поток для замены заблокированного потока ». – svick