Непонятно с async-await в C# - 2
Важно что предложенная модель объясняет происходящее...
Я как то не привык к сферическим коням в вакууме
ну вот например программка что была
private static async Task TestWithDirectAwait() { Wait1(); Console.WriteLine("after wait1"); await Wait2(); Console.WriteLine("after wait2"); await Wait3(); Console.WriteLine("after wait3"); }
Код сгенерированный компилятором был немного подработан, в итоге получился следующий вывод
***State Machine Main MoveNext -1
***State Machine TestWithDirectAwait MoveNext -1
after wait1
***State Machine Wait2 MoveNext -1
wait2 Start tread id 1 (Main1-1)
***State Machine Wait2 MoveNext 0
wait2 for 2000 is ready after 00:00:02.0550266 tid 4 (Main2-4)
***State Machine TestWithDirectAwait MoveNext 0
after wait2
***State Machine Wait3 MoveNext -1
wait3 Start tid 4 (Main2-4)
***State Machine Wait3 MoveNext 0
wait3 for 1000 is ready after 00:00:03.0750480 tid 6 (Main3-6)
***State Machine TestWithDirectAwait MoveNext 1
after wait3
***State Machine Main MoveNext 0
Summary time 00:00:03.0754335 thread Id 6
Вот объясни мне по модели, как это все работает. При этом у тебя есть только
- State Machine
- Synchronization context
- Execution Context
- ThreadPool
- TaskScheduler