Я знаю, что есть много вопросов об async/await, но я не смог найти на них ответа.
Я столкнулся с чем-то, чего не понимаю, рассмотрите следующий код:
void Main()
{
Poetry();
while (true)
{
Console.WriteLine("Outside, within Main.");
Thread.Sleep(200);
}
}
async void Poetry()
{
//.. stuff happens before await
await Task.Delay(10);
for (int i = 0; i < 10; i++)
{
Console.WriteLine("Inside, after await.");
Thread.Sleep(200);
}
}
Очевидно, что в операторе await управление возвращается вызывающей стороне, а ожидаемый метод выполняется в фоновом режиме. (предположим, операция ввода-вывода)
Но после того, как управление возвращается к оператору await, выполнение становится параллельным, вместо того, чтобы (мое ожидание) оставаться однопоточным.
Я ожидаю, что после того, как «Задержка» будет завершена, нить будет принудительно возвращена в метод Поэзии, продолжится с того места, где она была.
Что он и делает. Странная вещь для меня, почему метод «Основной» продолжает работать? это одна нить перескакивает с одной на другую? или есть два параллельных потока?
Разве это не проблема безопасности потоков, еще раз?
Я нахожу это запутанным. Я не эксперт. Спасибо.