立即等待异步操作

时间:2014-09-12 19:01:28

标签: c#

我正在查看其他开发人员的这些代码行:

  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)
  ....

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

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

2 个答案:

答案 0 :(得分:6)

  

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

绝对 - 这意味着虽然您需要在执行任何更多工作之前返回操作返回的值,但是在您等待它时不会占用线程。如果您正在编写GUI,那么这一点尤其重要,其中绑定GUI线程基本上意味着冻结UI。

听起来你正专注于&#34;并行做多件事&#34;异步的一面,这很重要,但远不是它的唯一好处。

答案 1 :(得分:0)

常犯的错误是等待阻止。它没有。

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