Heim >Backend-Entwicklung >C++ >`return act ay' vs. direkt eine Aufgabe zurückgeben: Warum wartet 'Warte' in 'Verwenden' Blöcke?

`return act ay' vs. direkt eine Aufgabe zurückgeben: Warum wartet 'Warte' in 'Verwenden' Blöcke?

Patricia Arquette
Patricia ArquetteOriginal
2025-02-02 13:31:10287Durchsuche

vs. zurück zur Aufgabe direkt: return await Die Bedeutung in await blockiert using

Obwohl eine Aufgabe direkt aus der asynchronen Methode zurückgegeben wird und die Verwendung von

gleich der Verwendung von return await ist, gibt es subtile, aber wichtige Unterschiede zwischen den beiden bei der Verwendung der using -Blockverpackungsmethode.

unter Berücksichtigung der folgenden zwei gleichen Methoden:

<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>

In der ersten Methode wird bei direkter Rückkehr zur Aufgabe der using -Block das DoAnotherThingAsync -Objekt sofort an die Foo -Methode veröffentlicht, um den Steuercode zurückzugeben und das DoAnotherThingAsync -Objekt sofort freizugeben. Die -Methode kann jedoch nicht abgeschlossen sein, was zu möglichen Fehlern führen kann.

Im Gegenteil, bei der Verwendung von return await wird der Steuerfluss vor der fortlaufenden Ausführung warten. Dies stellt sicher, dass Blöcke erst nach vollständiger Ausführung des asynchronen Betriebs freigegeben werden. Daher funktioniert die zweite Methode normal, und die erste Methode kann veröffentlicht werden. DoAnotherThingAsync using Foo

Das obige ist der detaillierte Inhalt von`return act ay' vs. direkt eine Aufgabe zurückgeben: Warum wartet 'Warte' in 'Verwenden' Blöcke?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn