Rumah > pembangunan bahagian belakang > C++ > `kembali menunggu` vs secara langsung mengembalikan tugas: Mengapa` menanti `perkara dalam` menggunakan` blok?

`kembali menunggu` vs secara langsung mengembalikan tugas: Mengapa` menanti `perkara dalam` menggunakan` blok?

Patricia Arquette
Lepaskan: 2025-02-02 13:31:10
asal
286 orang telah melayarinya

vs kembali ke tugas secara langsung: return await kepentingan dalam await blok using

Walaupun tugas dikembalikan secara langsung dari kaedah asynchronous dan penggunaan

adalah sama dengan penggunaan return await, terdapat perbezaan yang halus tetapi penting antara kedua -dua apabila menggunakan kaedah pembungkusan blok using.

Memandangkan dua kaedah yang sama berikut:

Task<TResult> DoSomethingAsync()
{
    using (var foo = new Foo())
    {
        return foo.DoAnotherThingAsync();
    }
}

async Task<TResult> DoSomethingAsync()
{
    using (var foo = new Foo())
    {
        return await foo.DoAnotherThingAsync();
    }
}
Salin selepas log masuk

Dalam kaedah pertama, apabila kembali ke tugas secara langsung, blok using akan segera melepaskan objek DoAnotherThingAsync ke kaedah Foo untuk mengembalikan kod kawalan dan segera melepaskan objek DoAnotherThingAsync. Walau bagaimanapun, kaedah tidak boleh diselesaikan, yang boleh menyebabkan kesilapan yang berpotensi.

Sebaliknya, apabila menggunakan return await, aliran kawalan akan menunggu sebelum pelaksanaan berterusan. Ini memastikan bahawa blok dikeluarkan hanya selepas operasi tak segerak dilaksanakan sepenuhnya. Oleh itu, kaedah kedua akan berfungsi secara normal, dan kaedah pertama boleh dikeluarkan. DoAnotherThingAsync using Foo

Atas ialah kandungan terperinci `kembali menunggu` vs secara langsung mengembalikan tugas: Mengapa` menanti `perkara dalam` menggunakan` blok?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan