私は一緒にチェーンに私が作成したいくつかの非同期メソッドを試みていると私はこれがチェーン非同期メソッド
をどのように機能するかについての私の部分にいくつかの基本的な誤解はここに私のコードの表現がありますされると信じて:
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();
});
}
LoadFoo( "bar"、 "baz"、 "qux")のReadAsyncメソッドがすべて実行され、完了した後、それらがすべて完了した後、LoadEverything()が呼び出されたときに、 LoadEverythingは、 "bar"、 "baz"、 "qux" ReadAsyncメソッドが終了するまでOtherLoadMethod()が実行されないように実行されます。
私が実際に見ているのは、LoadFooが呼び出された後、OtherLoadMethodがLoadFooの最後の補完に達する前に実行を開始することです( "qux" ReadAsyncの続行)。
ここで私の誤解を解決するのに役立つ人はいますか? ReadAsync( "qux")が終了してtrueを返すまで、OtherLoadMethodの実行がなぜ待たないのですか?
:IMHO、あなたのコードは、(あなたの代わりに
Task
のTask<bool>
を返している理由戻り値がしかtrue
であるから、それは、明確ではないのですが、私は自分でその部分を把握することができます仮定)次のようになります'ContinueWith'を使わないでください。代わりに 'await'を使用してください。 –