注:これは基本的に、私が混乱していることを示していasync
ます。多分それは他の混乱した人々を助けることができます.
ループ内でいくつかのHttpClient
async
await
リクエストを実行していましたが、リクエストが順番に実行されているように見えることに気付きました (次の反復を開始する前に結果を待機していました)。
await Task.Delay
そこで、Web リクエストの代わりに in loopを使用してテストを試みました。
多分私はプロットを失ったかもしれませんがawait
、結果が待っている間にループ内でループの次の反復が開始される可能性があると思っていたでしょう。代わりに、すべてが順番に実行されるようです:
int _iterations = 1000;
int _count= 0;
Stopwatch _stopwatch = new Stopwatch();
_stopwatch.Start();
for (int i = 0; i < _iterations; i++)
{
Console.WriteLine("Elapsed: {0}. Calls count: {1}.", _stopwatch.Elapsed, ++_count);
await Task.Delay(5000);
Console.WriteLine("Calls count again: {0}", _count);
}
これにより、次の結果が得られます。
Elapsed: 00:00:00.0000059. Calls count: 1.
Calls count again: 1
Elapsed: 00:00:05.0022733. Calls count: 2.
Calls count again: 2
Elapsed: 00:00:10.0100470. Calls count: 3.
Calls count again: 3
Elapsed: 00:00:15.0182479. Calls count: 4.
はい、を省略して、返されたs をいくつかの配列にawait
追加し、を使用できます。しかし、それがループ内でブロックされており、すべてが順番に実行されていることに驚いています。これは正常ですか?Task
Task.WhenAll
await
編集:結論として、私はそこで少し混乱しました。でループ外に制御を戻しますawait
。これは同期の類推を模倣しているため理にかなっていますが、もちろんスレッドをブロックしません。