Здравствуйте, novitk, Вы писали:
S>> Покажи работу с TaskCompletionSource и CancellationToken.
N>TaskCompletionSource? Судя по описанию назыывается вроде чуть менее чем везде Promise.
N>Как делать cancellation в языке с зелеными потоками? Например так.
Суть того, что задачи никак не связаны с асинхронные операции ввода-вывода. Порт завершения ввода / вывода (IOCP)
TaskCompletionSource это создание задачи и ручное получение результата через SetResult
https://learn.microsoft.com/ru-ru/dotnet/api/system.threading.tasks.taskcompletionsource-1?view=net-7.0
Ты почитай ссылки, что я даю. Я трачу время и они полезны
Использование асинхронного шаблона, основанного на задачах
S>>Можно вызавть await для массива задач (WhenAll, WhenAny ), можно вызвать ContinueWith итд. То есть больше механизмов использования.
N>Ты разговариваешь с человеком, который знаком с первоисточником всей так возбуждающей тебя красоты, которую МS тащит в C# — монадами, хаскeлем, библиотеками эффектов, FRP и т.д.
Я изучал монады, хаскели и прочее. И то что сделано в F# и C# меня возбуждает больше.
Я просто указал на разницу между потоками (пусть и зелеными) и задачами на пулах потоков. Только при чем тут "монадами, хаскeлем, библиотеками эффектов, FRP и т.д."
Вообще в основе своей той же стейт машины стоит yield, то есть генерация класса с замыканием переменных для хранения состояния и изменение через MoveNext.
Оно прекрасно себя зарекомендовало в Linq и было перенесено на async/await
Кстати в свое время делали энумераторы делали на файберах, аналог зеленых потоков. Но MS предложили через yield и дало огромный толчок для использования функциональщины в C#