Уместно ли использовать метод async void
для начала долгой жизни? Я знаю Nito или Task.Run()
Может использоваться для использования Task не по-асинхронному. В чем разница? Есть ли подводные камни?Использование метода async void для запуска долгоживущей операции
Судя по всему, что я имею в виду, я могу написать так:
async void bar()
{
try
{
//...
}
catch (Exception ex)
{
// no rethrowing here
}
}
void foo()
{
bar();
// will continue right after 1st await in bar()
baz();
}
Почему бы не «async Task» и просто не ждать бар? –
@ScottChamberlain Но будет ли он запускаться асинхронно, если не ожидается позже в коде? – ilivit
Выполнение async void и выполнение async Задача без ожидания возвращенной задачи имеет такое же поведение. вызов ожидания не запускает задачу, он ждет завершения уже начатой задачи. Вот почему, если вы вызываете ожидание задачи, которая была запущена с помощью 'new Task()' и никогда не вызывала '.Start()', ожидание будет ждать вечно, потому что задача не запущена. –