是真正的异步(轮询异步任务的正确方法)吗?

时间:2018-10-14 05:34:31

标签: c# .net asynchronous async-await task

这是“真正的异步”吗(即非阻塞且未创建新线程)?

build/reports/project/dependencies/index.html

此外,它甚至正确吗?

1 个答案:

答案 0 :(得分:0)

假设DoSomethingAsync()方法正在执行一些异步操作,则可以删除asyncTask.Start()调用。我将删除其中包含Task.Delay(1000)的循环,因为即使任务在此之前完成,它也会延迟一整秒。至少您可以这样做:

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

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

如果您想每秒写一个“仍在运行”的日志条目,然后在log.Info(“ Started”)之后,您可以启动一个执行日志记录的计时器,然后在等待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 - Best Practices in Asynchronous Programming