Является ли true async (правильный способ опроса асинхронной задачи)? - PullRequest
0 голосов
/ 14 октября 2018

Является ли это "истинным асинхронным" (т. Е. Неблокирующим и новые потоки не создаются)?

var asyncTask = DoSomethingAsync();
asyncTask.Start();
log.Info("Started!");
while (asyncTask.Status == TaskStatus.Running)
{
    log.Info("Still running ...");
    await Task.Delay(1000);
}
log.Info("Complete!);

Кроме того, это даже правильно?

1 Ответ

0 голосов
/ 14 октября 2018

Вызов asyncTask.Start () может быть удален при условии, что метод DoSomethingAsync () выполняет некоторые асинхронные действия.Я бы удалил цикл с Task.Delay (1000), так как он будет задерживаться на целую секунду, даже если задача будет завершена задолго до этого.Как минимум, вы могли бы просто сделать это:

var asyncTask = DoSomethingAsync();
log.Info("Started!");

await asyncTask;
log.Info("Complete!);

Если вы хотите записывать запись журнала «Все еще работает» каждую секунду, то после log.Info («Запущено») вы можете запустить таймер, который выполняет регистрацию изатем остановите его после ожидающего asyncTask;:

try
{
    var asyncTask = DoSomethingAsync();
    log.Info("Started!");
    timerRunningLog.Start();
    await asyncTask;
}
catch (Exception ex)
{
    // do something with the exception... (e.g. log, throw)
}
finally
{
    timerRunningLog.Stop();
    log.Info("Complete!);
}

Вот несколько полезных сведений: Async / Await - лучшие практики асинхронного программирования

...