C#5と.Net 4.5で非同期プログラミングを学び始めましたが、私は理解できないことがあります。非同期プログラミングとループで待ちます
private static int count;
public static void Main()
{
LoopTest();
Console.ReadKey(false);
}
static async void LoopTest()
{
count = 0;
for (var index = 0; index < 10; ++index)
{
Console.WriteLine("({0}) In Loop before await, Index {1}, Thread: {2}", count++, index, Thread.CurrentThread.ManagedThreadId);
await Task.Factory.StartNew(() => Thread.Sleep(10));
}
}
結果は次のとおりです。
(0) In Loop before await, Index 0, Thread: 9
(1) In Loop before await, Index 1, Thread: 10
(2) In Loop before await, Index 2, Thread: 11
(3) In Loop before await, Index 3, Thread: 10
(4) In Loop before await, Index 4, Thread: 11
(5) In Loop before await, Index 5, Thread: 10
(6) In Loop before await, Index 6, Thread: 12
(7) In Loop before await, Index 7, Thread: 11
(8) In Loop before await, Index 8, Thread: 10
(9) In Loop before await, Index 9, Thread: 12
だから、同じループへのアクセスが異なるスレッドがありますか?インデックス変数に競争条件がありますか?何をやっている
Task.Factory.StartNew(()=> Thread.Sleep(10))を待ってください。 Task.Delay(10)を待ちます。あなたは10ミリ秒間あなたのスレッドを離れることになっています。 –
@publicENEMYも同様に 'Task.Delay';) –
@ ToniPetrina Thread.Sleepは、10msのスレッド使用量をシミュレートするためにスレッドを保持するために使用されます。 –