タスク ファクトリに次のようなタスクを入力しています (疑似コード):
private int _taskcounter;
をちょきちょきと切る
var factory = new TaskFactory();
for(var i = 0;i<1000;i++)
factory.StartNew(() => doWork());
をちょきちょきと切る
private void doWork(){
Interlocked.Increment(ref _taskcounter);
//do some slow I/O work here
Interlocked.Decrement(ref _taskcounter);
}
_taskcounter を見ると、
最初は約 10 個のタスクが開始されていることがわかりますが、キューが終了するまで 1 ~ 2 個のタスク/秒が開始されます。
ささいな明白な行動ですね。
私の質問は:
タスク ファクトリに強制的に開始時にさらに多くのタスクを開始させる方法はありますか?
過度のメモリ消費を防ぐために、いくつかのmsdnサンプルクラスのバリエーションを使用して、実行中のタスクの最大数を既に制限しています。
それとも、このおかしな測定方法や私の考察が間違っているのでしょうか?
すべての作業を異なるスレッドで実行する必要はありません。それ以外の場合は、ファクトリを使用し
ません。ファクトリの非ワーク スティーリング動作の恩恵を受けるだけです。
他のすべてについては、工場の知性に頼っています。