3
.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によって使用される)は、そのスレッドの1つがブロックを開始したという通知を受け取り、この情報を使って新しいスレッドをいつ作成するかを決定します。 – svick
svick、良いコメント。私はまたこれが真実だとは考えていますが、これは文書化されていません私は今、その参照を見つけることができないようです。 – usr
実際にドキュメントであるかどうかはわかりませんが、C#*、第3版、759ページを参照してください。*これらのスレッドのいずれかが自発的にブロックすると、Windowsはスレッドプールにスレッドの実行が停止しました。スレッドプールは[...]ブロックされたスレッドを置き換える新しいスレッドを作成します。 – svick