Deutsch
Germany.ruФорумы → Архив Досок→ Программирование

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

04.09.21 21:49
Re: Непонятно с async-await в C# - 2
 
Бесконечный цикл посетитель
в ответ AlexNek 03.09.21 13:07, Последний раз изменено 04.09.21 21:51 (Бесконечный цикл)
Очень интересная интерпретация, а ссылочку на теорию мона?

Это не интерпретация - это основы. А интерпретация это как реализовано с C#, Python или других языках или либах. Поэтому я и говорю, что лучше все-таки разобраться в основах, чем как это реализовано в каком-то языке. По крайней мере когда я въезжал в тему, мне так было существенно быстрее.


Вот ссылки: Coroutine, Event_loop


Смысл простой:

  • Корутины (например, объявляются через async) нельзя вызвать и получить значение. Единственно что можно это добавить ее как таск в очередь и поучить назад объект, который эту задачу представляет (фьючерс, промис и т.п.)
  • Внутри корутины можно ожидать (например, через await) когда другая таска родит завершится и получить ее результат. Это явный сигнал диспетчеру.


Что происходит с тасками в очереди это забота диспетчера и его логики. Но по простому таска либо котова к выполнению либо не готова (ждет результата). Когда поток освобождается он выбирает из тех, кто готов. Если таска заканчиватся, то он помечает как готовые ту таску, которая ждала этого результат.


Зачем это нужно и где полезно это другая тема. Кстат, хоть ЖС заслуженно ругают, у него есть одна большая заслуга - он первым ввел такой механизм в малограмотные массы.

 

Перейти на