ホームページ >バックエンド開発 >C++ >`return await` vs.タスクを直接返す:なぜ「使用する」ブロックで「待っている」ことはなぜですか?

`return await` vs.タスクを直接返す:なぜ「使用する」ブロックで「待っている」ことはなぜですか?

Patricia Arquette
Patricia Arquetteオリジナル
2025-02-02 13:31:10288ブラウズ

vs.タスクに直接戻る:return awaitawaitブロックusingの重要性

タスクは非同期方法から直接返され、

の使用はreturn awaitの使用に等しくなりますが、usingブロックパッケージング方法を使用する場合、2つの間には微妙だが重要な違いがあります。

次の2つの同じ方法を考慮してください

<code class="language-csharp">Task<TResult> DoSomethingAsync()
{
    using (var foo = new Foo())
    {
        return foo.DoAnotherThingAsync();
    }
}

async Task<TResult> DoSomethingAsync()
{
    using (var foo = new Foo())
    {
        return await foo.DoAnotherThingAsync();
    }
}</code>
最初の方法では、タスクに直接返すときに、

ブロックはすぐにusingオブジェクトをDoAnotherThingAsyncメソッドにリリースして、制御コードを返し、Fooオブジェクトを直ちにリリースします。ただし、メソッドは完了しない可能性があり、潜在的な間違いにつながる可能性があります。 DoAnotherThingAsync それどころか、

を使用すると、継続的な実行が完了する前に制御フローが待ちます。これにより、非同期操作が完全に実行された後にのみブロックがリリースされます。したがって、2番目の方法は正常に機能し、最初の方法がリリースされる場合があります。

return await DoAnotherThingAsync

以上が`return await` vs.タスクを直接返す:なぜ「使用する」ブロックで「待っている」ことはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。