質問: 0; i < 10; i++) { Task.Run(() => taskWork.Work()); } // task処理するクラスメソッド public class TaskWork { public void Work() { while(true) { // taskで繰り返す処理 } } } ```
回答: Taskは結果を得るための一連の処理を表す概念です。例えばStream.ReadAsync()はread結果を得るためのタスクを返します。そしてTaskの実行方法については規定されておらず、.NETランタイムが効率が良いと考える方法で実行されます。 その際、基本的にはTaskは短時間で完了すると仮定し、不用意に多数のTaskを並列実行しません。もし、長時間実行するTaskなのであれば作成時にTaskCreationOptions.LongRunning.aspx)を指定することでランタイムにTaskの性質を通知すべきです。 コードが提示されたので ``` // 10個スレッドを生成する箇所 TaskWork taskWork = new TaskWork(); for (int i = 0; i < 10; i++) { //Task.Run(() => taskWork.Work()); Task.Factory.StartNew(() => taskWork.Work(), TaskCreationOptions.LongRunning); } ``` としてはどうでしょうか。 ただし、そもそもTaskの概念を理解しておらず、ThreadもしくはThreadPoolの代替として選択されているのであれば、Taskではなく適切なクラスを使用することをお勧めします。