Кажется имелось ввиду что надо писать await Task.Delay() а не Task.Delay().Wait() Wait() - то тоже синхронный вызов и блокирует вызывающий поток, только при этом еще и таска создается когда Task.Delay вызывается. тут единственным выходом кажется является переделка всего кода на асинхронные методы чтобы это имело смысл (ну и тут серьезно накосячить можно и все сломать при такой масштабной переделке). Если не прав, поправь, интересно) ну а вообще пет проекты они такие - постоянно какие-то новые баги прилетают)
Да, ты прав, Task.Delay().Wait() - блокирует основной поток. Это лучше чем Thread.Sleep по нагрузке на процессор. Придётся таки переделать всё на async функции.
@@zapominai возможно там так: If the current task has not started execution, the Wait method attempts to remove the task from the scheduler and execute it inline on the current thread. If it is unable to do that, or if the current task has already started execution, it blocks the calling thread until the task completes. Он запускает таску сразу в текущем потоке, а там асинхронный вызов к операционной системе, из-за этого поток отдается обратно в тред пул. Если там была бы уже запущенная таска, возможно была бы блокировка потока. Пока у меня такая версия происходящего Кстати вместо Wait() при переходе из асинхронных в синхронные методы обычно используется GetAwaiter().GetResult(), в последнем варианте эксепшены прокидываются без обертки в AggregateException что удобнее в отлове
@@zapominai кстати вместо Wait() обычно используется GetAwaiter().GetResult(), так эксепшены из таски прокидываются без обертки в AggregateException что удобнее в отлове
С Новым годом !!!Успехов во всех делах,всего,чего сами себе желаете,обнимаем,все мы.❤❤❤❤❤❤❤❤❤❤
С новым годом!
Кажется имелось ввиду что надо писать await Task.Delay() а не Task.Delay().Wait()
Wait() - то тоже синхронный вызов и блокирует вызывающий поток, только при этом еще и таска создается когда Task.Delay вызывается.
тут единственным выходом кажется является переделка всего кода на асинхронные методы чтобы это имело смысл (ну и тут серьезно накосячить можно и все сломать при такой масштабной переделке). Если не прав, поправь, интересно)
ну а вообще пет проекты они такие - постоянно какие-то новые баги прилетают)
Да, ты прав, Task.Delay().Wait() - блокирует основной поток. Это лучше чем Thread.Sleep по нагрузке на процессор. Придётся таки переделать всё на async функции.
Сейчас сел проверять, никаких блокировок родительского потока не увидел. Хоть пишут, что они должны быть. В следующем ролике подробно расскажу.
Всё ещё сложнее....)
@@zapominai возможно там так: If the current task has not started execution, the Wait method attempts to remove the task from the scheduler and execute it inline on the current thread. If it is unable to do that, or if the current task has already started execution, it blocks the calling thread until the task completes.
Он запускает таску сразу в текущем потоке, а там асинхронный вызов к операционной системе, из-за этого поток отдается обратно в тред пул.
Если там была бы уже запущенная таска, возможно была бы блокировка потока.
Пока у меня такая версия происходящего
Кстати вместо Wait() при переходе из асинхронных в синхронные методы обычно используется GetAwaiter().GetResult(), в последнем варианте эксепшены прокидываются без обертки в AggregateException что удобнее в отлове
@@zapominai кстати вместо Wait() обычно используется GetAwaiter().GetResult(), так эксепшены из таски прокидываются без обертки в AggregateException что удобнее в отлове