Непонятно с async-await в C# - 2
Очень интересная интерпретация, а ссылочку на теорию мона?
Это не интерпретация - это основы. А интерпретация это как реализовано с C#, Python или других языках или либах. Поэтому я и говорю, что лучше все-таки разобраться в основах, чем как это реализовано в каком-то языке. По крайней мере когда я въезжал в тему, мне так было существенно быстрее.
Вот ссылки: Coroutine, Event_loop
Смысл простой:
- Корутины (например, объявляются через async) нельзя вызвать и получить значение. Единственно что можно это добавить ее как таск в очередь и поучить назад объект, который эту задачу представляет (фьючерс, промис и т.п.)
- Внутри корутины можно ожидать (например, через await) когда другая таска
родитзавершится и получить ее результат. Это явный сигнал диспетчеру.
Что происходит
с тасками в очереди это забота диспетчера и его логики. Но по простому таска либо котова к выполнению либо не готова (ждет результата). Когда поток освобождается он выбирает из тех, кто готов. Если таска заканчиватся, то он помечает как готовые ту таску, которая ждала этого результат.
Зачем это нужно и где полезно это другая тема. Кстат, хоть ЖС заслуженно ругают, у него есть одна большая заслуга - он первым ввел такой механизм в малограмотные массы.