私は自分がやっている作業プロジェクトのためのタスク並列ライブラリの使用法を調査していて、長期実行タスクの長所/短所を理解したいと思います。実例はまだ持っていませんが、その背後にある理論を理解したいだけです。
MSDNのページから言うことからタスクスケジューラこのそう質問ThreadPoolの外部でスレッドを作成しないように、長時間実行されるタスクはできるだけ避けることが最善のようです。しかし、これではなく、完了までに時間がかかるようなタスクがあったとします。
Task.Factory.StartNew(() => DoTimeConsumingWork(), TaskCreationOptions.LongRunning)
このように、作業をもっと小さく、より速い作業単位に分割して、タスクの継続を使用してみてください。
Task.Factory
.StartNew(() => DoWorkPart1())
.ContinueWith(t => DoWorkPart2())
.ContinueWith(t => DoWorkPart3())
//...etc
このアプローチはもう少し有益なのでしょうか。
長時間実行されるタスクはできるだけ避けるのが最善のようです。
完全には正しくありません。あなたがそれを必要とするならば、あなたはどういうわけかスレッドを作る/割り当てる必要があるでしょう、そして次にLongRunningオプションを持つタスクはおそらく最良の選択です。このフラグは、スケジューラが予測できるように、タスクに時間がかかる可能性があることをスケジューラに通知するだけのものです。それはオプションを無視するかもしれません。
あなたの仕事をもっと小さく、より速い仕事の単位に分割してみてください。
できればそれをやりなさい。しかし、分別があるわけではありません。
指定した場合TaskCreationOptions.LongRunning
ほとんどの場合、スレッドプールの外部から専用スレッドを割り当てます。
単に実行時間の長いタスクがスレッドプールからのスレッドではなく別の専用スレッドで実行されるようにするBackgroundWorkerクラスを使用することをお勧めします。