【问题标题】:Access to return value from Task (C#)访问任务的返回值 (C#)
【发布时间】:2020-04-03 12:41:21
【问题描述】:

我得到了方法:

class C1
{
  private async Task OpenCar()    
 {
   ...
    await p.ReopenNewDoor(x, y);
    return //false or true
  }
}

然后:

class C1
{
  public Task ReopenNewDoor(int x, int y)
  {
     return mvvm.DoSomething(x,y)
  }      
}

还有:

class C3
{
  internal async Task<bool> DoSomething(int x, int y)
  {
    .....
    if(a = b) return false;
    ....
    if(z!) return true;
  }
}

我怎么知道ReopenNewDoor 会返回什么? (true or false)

【问题讨论】:

  • 好吧,你不必返回任何东西; private async Task OpenCar() {... await p.ReopenNewDoor(x, y);}
  • 您应该将ReopenNewDoor 的返回类型声明为Task&lt;bool&gt; 并使用Result 属性,或者简单地使用await 来代替它

标签: c# async-await return task


【解决方案1】:
class C1
{
  private async Task<bool> OpenCar()    
  {
   ...
    var result = await p.ReopenNewDoor(x, y);
    return result;
  }
}

如果这不起作用,您可以使用

访问任务结果

p.ReopenNewDoor(x, y).Result;

【讨论】:

  • resultbool 不是 Task
  • 真的吗?然后必须更新方法头:private async Task OpenCar
  • 应该是private async Task&lt;bool&gt; OpenCar()
  • 是的。但身体是一样的。然后可以使用 Result 读取任务的结果
  • 无需访问.Result,因为await 会为您解开结果。 await p.ReopenNewDoor(x, y).Result; 也不会编译,因为Resultbool,所以你正在尝试await 一个bool
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多