Rumah >pembangunan bahagian belakang >C++ >Async/Await dalam C#: Kembalikan Tugas Secara Terus atau Tunggu?

Async/Await dalam C#: Kembalikan Tugas Secara Terus atau Tunggu?

Mary-Kate Olsen
Mary-Kate Olsenasal
2025-01-04 05:29:39263semak imbas

Async/Await in C#: Return Task Directly or Await?

Akibat Pengembalian lwn. Menunggu pada Penghujung Kaedah Async

Dalam kaedah async yang mengembalikan Tugasan, anda mempunyai dua pilihan untuk mengendalikan panggilan async berikutnya:

Pilihan A: Kembalikan Tugas Secara langsung

Task FooAsync()
{
    return BazAsync();
}

Pilihan B: Tunggu Tugasan dan Pulangan

async Task BarAsync()
{
    await BazAsync();
}

Akibat Pilihan A (Kembali Terus)

  • Kelebihan: Memerlukan kurang kod plat dandang dan mencipta satu tugasan yang lebih sedikit.
  • Kelemahan: Pengecualian yang dilemparkan dalam kaedah segerak akan dihantar secara serentak.

Pilihan ini sesuai jika anda kaedah melakukan sejumlah kecil kerja segerak dan kemudian memanggil async tunggal kaedah.

Akibat Pilihan B (Tunggu dan Kembali)

  • Kelebihan: Pengecualian akan dikendalikan secara tidak segerak.
  • Kelemahan: Lebih banyak kod kata kerja dan ciptaan tugas tambahan.

Pilihan ini lebih baik jika:

  • Kaedah anda perlu melakukan operasi tak segerak tambahan selepas memanggil BazAsync().
  • Anda mahu untuk mengendalikan pengecualian yang dibangkitkan dalam kaedah tak segerak secara tidak segerak.

Nota: Anda tidak boleh mengembalikan tugas secara langsung jika kaedah itu sendiri diisytiharkan sebagai tak segerak. Ini akan menghasilkan jenis pemulangan Tugas, yang tidak dibenarkan.

Ringkasnya, keputusan antara kembali terus atau menunggu bergantung pada keperluan khusus kaedah anda. Pertimbangkan struktur kod, potensi pengecualian dan gelagat aplikasi anda yang diingini semasa membuat pilihan ini.

Atas ialah kandungan terperinci Async/Await dalam C#: Kembalikan Tugas Secara Terus atau Tunggu?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

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