Здравствуйте, LWhisper, Вы писали:
LW>Здравствуйте, Serginio1, Вы писали:
S>> Ны дык все их нужно заменять на аналоги
S>>Microsoft.VisualStudio.Threading
S>>AsyncReaderWriterLock
S>>AsyncAutoResetEvent()
S>> И только там , где это невозможно использовать потоки. При этом получится гибридная система, но с минимумом ручных потоков.
LW>Понял, как это работает! Спасибо!
LW>Фактически, мы виси не на локе внутри метода, а возвращаем таску, помещённую в очередь. Когда же приходит Set, для таски выставляется результат выполнения.
LW>Неверно истолковал использование лока внутри AsyncAutoResetEvent.
Так скажем
И задача на await если нет сигнала просто заканчивает работу в потоке и возвращает его в пул.
Когда приходит Set, код на await продолжается в новом потоке.
Там внутри метод на соновании метода создается класс, переменные метода становятся свойствами класса и метод разбивается на методы, и соответсвенно переходы по состоянию.
Я в свое время писал замену рекурсивного обходчика
http://rsdn.org:8888/article/alg/tlsd.xmlАвтор(ы): Сергей Смирнов (Serginio1)
Дата: 14.08.2004
Пример реализации двухуровневого массива с помощью нового средства С# — generics. Сравнение производительности различных реализаций сортированных списков.
так суть yield та же. Создать отдельный класс с сохранением состояние в свойствах метода и двигаться в зависимости от текущего состояния. КА.
Set просто вызывает ContinueWith задачи.