如何链接呼叫,使用响应作为另一个输入

问题描述:

是否可以将来自async调用的响应用作另一个呼叫的输入,并以某种方式将它们链接在一起。如何链接呼叫,使用响应作为另一个输入

我在寻找类似:

var model = new MyModel() { 

    abc = await _service.getAbc(), 
    def = await _service.getDef(abc) 
} 

我不知道这是可能的,但只是询问是否异步/任务可以处理这种情况。

+5

你想要的是一个“延续”。请参阅[Task.ContinueWith](https://msdn.microsoft.com/en-us/library/dd270696(v = vs.110).aspx)并在此处:https://docs.microsoft.com/en-us/dotnet/standard/parallel-programming/chaining-tasks-by-using-continuation-tasks – Fildor

尝试:

var result = await _service.getAbc().ContinueWith((aa) => 
      { 
       _service.getDef(aa); 
      }).Wait(); 
+0

您无法使用.Wait()进行等待,因为.Wait()将是一个阻塞调用,与await进行比较是不同步的 –

+0

欢迎[so]!为什么以及如何解决问题?那些能够自己回答这些问题的人不需要别人的代码。 – jpaugh

您的代码几乎确实已经:

var abc = await _service.getAbc(); 
var def = await _service.getDef(abc); 
var model = new MyModel() { abc, def }; 

更一般地,任何async方法可以 “链” 的方法是这样的。您使用await来连接延续。

+0

不知道那个...很酷! +1 – Fildor