メインスレッドが新しいタスクを作成している単純なコードがあります。次に、タスクは複数の子タスクを生成します。メイン スレッドは、親タスクで「待機」を行います。プログラムを複数回実行しても同じ出力が得られないことに気付きました。以下のコードでは、各タスクの反復変数の値を出力していますが、異なる実行ではサブセットのみが出力されます。実行が順序付けられていないことは理解していますが、100 個の数字が出力されることを期待しているため (特定の順序ではありません)、実行を完了する必要があります。Wait を呼び出すと、すべての子タスクが完了するまで待機しませんか? VS2010 Team system Beta1 を実行しています
static void Main(string[] args)
{
Console.WriteLine("Main executing on ThreadID:- " + Thread.CurrentThread.ManagedThreadId.ToString());
var task = Task.Factory.StartNew(WriteNumbers);
task.Wait();
}
private static void WriteNumbers()
{
Console.WriteLine("WriteNumbers executing on ThreadID:- " + Thread.CurrentThread.ManagedThreadId.ToString());
for (int i = 0; i < 100; i++)
{
int localInt = i;
Task.Factory.StartNew(() =>
{
Write(localInt);
}, TaskCreationOptions.DetachedFromParent);
}
}
private static void Write(int i)
{
Console.WriteLine("Worker Thread executing on ThreadID:-" + Thread.CurrentThread.ManagedThreadId.ToString() + " Value:" + i.ToString());
}