русский
Germany.ruForen → Архив Досок→ Programmierung

Непонятно с async-await в C# - 2

06.09.21 22:22
Re: Непонятно с async-await в C# - 2
 
AlexNek патриот
AlexNek
in Antwort Murr 05.09.21 22:07
Важно что предложенная модель объясняет происходящее...

Я как то не привык к сферическим коням в вакууме смущ


ну вот например программка что была

    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
 

Sprung zu