立即等待异步操作

本文关键字:异步操作 等待 | 更新日期: 2023-09-27 18:21:38

我正在查看来自另一个开发人员的这些代码行:

  bool isValid = await engine.GetTaskByIdAsync(taskId);
  if(isValid )
  ....

当我使用async操作时,它是在异步操作完成时进行独立工作:

  Task<bool> task = engine.GetTaskByIdAsync(taskId);
  //Do work that doesn't need the "task" variable
  bool completed = await task;
  if(bool)
  ....

第一个示例似乎启动了一个异步操作,然后立即开始等待。我不明白这里有什么价值吗?

注意:此代码位于应用程序的数据访问层,因此它不与用户界面交互。

立即等待异步操作

我不明白这里有什么价值吗?

当然-这意味着,尽管你需要操作返回的值才能完成更多的工作,但在等待线程时,你不会占用线程。如果你正在编写GUI,这一点尤为重要,占用GUI线程基本上意味着冻结UI。

这听起来像是你在关注异步的"并行做多件事",这很重要,但远不是它的唯一好处

常见的错误是等待块。事实并非如此。

当前线程立即返回,并注册函数的剩余部分,以便在异步任务完成时执行。