синхронный метод, который скажем обращается к БД для проверки коннекшна формально асинхронным таким способом?
async Task<T> CheckConnection(...)
{
await Task.Delay(1);
}
Если проверка коннекшона может занимать до минуты, то почему бы не сделать её асинхронной? Таск дилэй вангую для того, чтоб канпелятор не оптимизировал и не сделал синхронным
Что?
Где именно?
https://t.me/DotNetRuChat/1523962
> формально асинхронным это не сделает запрос в базу асинхронным для чего здесь await Task.Delay(1)? асинхронные методы выполняются синхронно до первого await и если я правильно понял, там после этого идет синхронный запрос в базу поэтому чтобы сразу вернуть управление вызывающему потоку, и соффлоадить континуэйшн на тред из тред пула то бишь чтобы вызывающий поток не ждал синхронного похода в базу но Task.Delay(1) это хуйня, для этого есть Task.Yield()
Так в любом случае хуйня, можно просто ебануть Task.Run
Там может быть что угодно, лишь бы канпелятор не убрал await
можно, но это еще дополнительные накладные создаст
а когда компилятор убирает await?
Вот опять ты несешь фигную
Сделав тоже самое, что и await Task.Yield?
Когда знает что авэйтить нечего будет
Все еще продолжаешь
ну померяй с await Task.Yield() и с await Task.Run() чет мне кажется что разница будет
а пример есть?
фантома еще никто не передушнил
Ну напиши код, выведи номер потока, до и после, скомпилируй и как дебаг и как релиз, и позапускай. Потом расскажешь как компилятор оптимизирует await
Может с ValueTask путаешь?
Читаем варнинг
Оно await не убирает
Верно, его там и нет. Убирает асинк. А если есть авэйт, то не убирает
где убирает? можно пример кода а не ворнинга
Ну в IL убирает, где ж ещё. Не делается стэйтмашин
пример на https://sharplab.io/ пж
Проверь сам, пжл. Я с телефона. Где то помню читал
ну вот я чекнул, не убирается стейт машина
Именно для этого метода? Может у тебя она там для вызывающего?
Это потому что таск наверное. С войдовым может будет как я говорю. Но правда у автора вопроса тоже таск, так что возможно там реально await Task.Delay ни на что не повлияет
не будет так никогда а все потому что если компилятор вырежет асинк, то твой метод никто не сможет эвейтить а откуда компилятору знать эвэйтит ли кто-то твой метод? а если это публичный метод с либы?
Обсуждают сегодня