如何链接呼叫,使用响应作为另一个输入
是否可以将来自async
调用的响应用作另一个呼叫的输入,并以某种方式将它们链接在一起。如何链接呼叫,使用响应作为另一个输入
我在寻找类似:
var model = new MyModel() {
abc = await _service.getAbc(),
def = await _service.getDef(abc)
}
我不知道这是可能的,但只是询问是否异步/任务可以处理这种情况。
尝试:
var result = await _service.getAbc().ContinueWith((aa) =>
{
_service.getDef(aa);
}).Wait();
您无法使用.Wait()进行等待,因为.Wait()将是一个阻塞调用,与await进行比较是不同步的 –
欢迎[so]!为什么以及如何解决问题?那些能够自己回答这些问题的人不需要别人的代码。 – jpaugh
您的代码几乎确实已经:
var abc = await _service.getAbc();
var def = await _service.getDef(abc);
var model = new MyModel() { abc, def };
更一般地,任何async
方法可以 “链” 的方法是这样的。您使用await
来连接延续。
不知道那个...很酷! +1 – Fildor
你想要的是一个“延续”。请参阅[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