我試圖鏈在一起的幾個異步方法,我創建,我相信有關於它如何工作鏈接異步方法
這裏是我的代碼表示對我而言有些根本性的誤解:
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'。 –