Size: a a a

2020 March 26

IC

Ilya Chernoudov in pro.net
А не про контекст
источник

AH

Ayrat Hudaygulov in pro.net
EgorBo
не звучит как очень перфомант решение
Ты неправ.
поведение по умолчанию ОЧЕНЬ правильное, т.к. оно убирает целый пласт проблем с дедлоками когда ты ожидаешь сам себя
А для перформанса (редких кейсов) ты всегда можешь стартануть явно на треде коллера
источник

AH

Ayrat Hudaygulov in pro.net
Там вся разница в
Async.Start
Async.StartImmediate
источник

AH

Ayrat Hudaygulov in pro.net
вызывая асинк на треде коллера ты подписываешься что знаешь что тебя ожидает
источник

AH

Ayrat Hudaygulov in pro.net
а в сишарпе половина людей не в курсе что асинк метод начинатся на треде вызывающей стороны
источник

AH

Ayrat Hudaygulov in pro.net
даже больше половины
источник

IC

Ilya Chernoudov in pro.net
Ayrat Hudaygulov
Там вся разница в
Async.Start
Async.StartImmediate
Вот смотри, есть 2 метода return 1 и task.delay, как мне их вызвать одинаковым способом?
источник

AH

Ayrat Hudaygulov in pro.net
Ilya Chernoudov
Вот смотри, есть 2 метода return 1 и task.delay, как мне их вызвать одинаковым способом?
не понял
источник

IC

Ilya Chernoudov in pro.net
Ayrat Hudaygulov
не понял
Метод может выполниться синхронно или аснхронно
источник

IC

Ilya Chernoudov in pro.net
Ты не узнаешь об этом до вызова
источник

IC

Ilya Chernoudov in pro.net
При асинхронном выполнении произойдет переключение контекста из за io операции
источник

IC

Ilya Chernoudov in pro.net
А в синхронном нет
источник

AH

Ayrat Hudaygulov in pro.net
ну и? В фшарпе ты всё еще можешь получить такое поведение
источник

IC

Ilya Chernoudov in pro.net
Я должен позвать start или startasync
источник

IC

Ilya Chernoudov in pro.net
?
источник

AH

Ayrat Hudaygulov in pro.net
По умолчанию всё стартуется на пуле, контекст свича там не будет, твой тред пойдёт дальше другие асинки выполнять из очереди своей.
Контекст свич в фшарпе тоже явный

async {
 …
 do! Async.SwitchToContext someContext
 …
}
источник

AH

Ayrat Hudaygulov in pro.net
кстати это очень удобно, всегда можно на UI и на пул обратно свичнуться
источник

IC

Ilya Chernoudov in pro.net
Ayrat Hudaygulov
По умолчанию всё стартуется на пуле, контекст свича там не будет, твой тред пойдёт дальше другие асинки выполнять из очереди своей.
Контекст свич в фшарпе тоже явный

async {
 …
 do! Async.SwitchToContext someContext
 …
}
Так, а что будет делать поток пула когда будет происходить операция чтения с диска?
источник

AH

Ayrat Hudaygulov in pro.net
async {
 …
 do! Async.SwitchToContext someContext
 … /// делаем UI
 do! Async.SwitchToThreadPool
 … /// делаем что-то ещё
}
источник

AH

Ayrat Hudaygulov in pro.net
если чо, сверху будет два свича, но это очевидно из кода
источник