using System.Threading; using System.Threading.Tasks; namespace ConsoleApplication1 { class Program { static void Main(string[] args) { hoge(); Console.ReadLine(); } static void hoge() { var ts = new ListThread.Sleep のところで何かしら重たい処理を行う。(); for (int i = 0; i < 10; i++) ts.Add(Task.Run(() => Thread.Sleep(500))); Task.WaitAll(ts.ToArray()); } } }
すべてのスレッドの処理終了を待つには Task.WaitAll を使うのだが、引数に Task のインスタンスが必要になるので List<Task> に格納しておりやや冗長である。
Linq を使えばこう。
static void hoge() { Task.WaitAll(Enumerable.Range(0, 10).Select(n => Task.Run(() => Thread.Sleep(500))).ToArray()); }1行になったよ やったね!