0

У меня есть async метод, который вызывается во время возникновения Elapsed у System.Timers.Timer. Делегат принимает только сигнатуру void метода, но как пишут в интернете async void это небезопасно, а следовательно надо избегать подобного. Что мне делать в такой ситуации, где я вынужден использовать async void?

private async void _timer_Elapsed(object? sender, ElapsedEventArgs e)
{
    await Check();
}
Aarnihauta
  • 2,326
  • 3
  • 12
  • 23
  • Как-раз у вас это ок, потому что у вас обработка события. Для обработчиков события только и можно использовать async void – CrazyElf Mar 25 '22 at 12:41
  • "Что мне делать в такой ситуации, где я вынужден использовать async void?" - не забыть обработать возможное исключение. – vitidev Mar 25 '22 at 12:44
  • Зачем вообще вам таймер? https://ru.stackoverflow.com/a/1257322/373567 – aepot Mar 25 '22 at 17:16
  • @aepot ну что знаю то и использую, спасибо, гляну! – Aarnihauta Mar 26 '22 at 06:54
  • Все эти таймеры создавались еще до появления асинхронного программирования, как такового, так что вы смешиваете 2 эпохи, со всеми вытекающими. async void - плохо, вы без труда найдете, где почитать, почему именно. И допускается async void только когда по-другому никак, а в вашем случае очень даже как. Кстати, даже так можно, и этого не умеет ни один таймер. Все таймеры засекают время между концом предыдущего обработчика и началом следующего. – aepot Mar 26 '22 at 12:56

0 Answers0