我试图链在一起的几个异步方法,我创建,我相信有关于它如何工作链接异步方法
这里是我的代码表示对我而言有些根本性的误解:
public async Task<bool> LoadFoo()
{
return await Foo.ReadAsync("bar").ContinueWith((bar) =>
{
Foo.ReadAsync("baz").ContinueWith((baz) =>
{
Foo.ReadAsync("qux").ContinueWith((qux) =>
{
return true;
});
return true;
});
return true;
});
}
public void LoadEverything()
{
LoadFoo().ContinueWith((blah) =>
{
OtherLoadMethod();
});
}
现在我期待LoadEverything()被调用时,LoadFoo(“bar”,“baz”和“qux”)中的所有ReadAsync方法都将运行并完成,并且在它们全部完成之后,.Continue与在LoadEverything中将运行,以便在“bar”,“baz”和“qux”ReadAsync方法完成之前,OtherLoadMethod()不会执行。
我实际上看到的是LoadFoo被调用,然后OtherLoadMethod开始运行,最后在LoadFoo中完成(继续执行“qux”ReadAsync)。
有人可以帮助澄清我的误解吗?为什么不会执行OtherLoadMethod等到ReadAsync(“qux”)完成并返回true?
不要使用'ContinueWith';改用'await'。 –