Rumah >pembangunan bahagian belakang >C++ >Bagaimanakah Saya Menggunakan Kod Asynchronous dengan betul dalam Aplikasi Konsol C#?

Bagaimanakah Saya Menggunakan Kod Asynchronous dengan betul dalam Aplikasi Konsol C#?

Mary-Kate Olsen
Mary-Kate Olsenasal
2025-01-05 15:49:45174semak imbas

How Do I Properly Invoke Asynchronous Code in C# Console Applications?

Async Invocation dalam Aplikasi Konsol: Menyahsangka Mitos 'Up' dan 'Down'

Dalam C#, apabila menggunakan kaedah tak segerak, ia adalah lazimnya menegaskan bahawa penyegerakan mesti dikekalkan "atas" dan "bawah" timbunan panggilan. Walau bagaimanapun, dogma ini tidak berlaku untuk aplikasi konsol.

Pertimbangkan coretan kod ini:

public static async Task<int> SumTwoOperationsAsync()
{
    // Simulate time-consuming operations
    var firstTask = GetOperationOneAsync();
    var secondTask = GetOperationTwoAsync();

    // Sum the results of the operations
    return await firstTask + await secondTask;
}

private static async Task<int> GetOperationOneAsync()
{
    await Task.Delay(500); // Simulating operation delay
    return 10;
}

private static async Task<int> GetOperationTwoAsync()
{
    await Task.Delay(100); // Simulating operation delay
    return 5;
}

Menurut peraturan "atas dan bawah", nampaknya logik untuk menandakan fungsi Utama , di mana SumTwoOperationsAsync digunakan, sebagai tak segerak. Namun, andaian ini tidak betul. Aplikasi konsol tidak menyokong titik masuk tak segerak. Percubaan untuk berbuat demikian akan mengakibatkan ralat kompilasi yang menyatakan, "titik masuk tidak boleh ditandakan dengan pengubah suai 'async'."

Jadi, bagaimanakah kita menggunakan kod tak segerak dalam aplikasi konsol? Terdapat dua pendekatan utama:

  1. Menggunakan Wait atau GetAwaiter().GetResult(): Kaedah ini secara serentak menunggu tugasan yang dikembalikan oleh SumTwoOperationsAsync.
static void Main()
{
  MainAsync().Wait();
  // Alternatively, to avoid wrapping exceptions in AggregateException:
  // MainAsync().GetAwaiter().GetResult();
}

static async Task MainAsync()
{
  // Async code goes here
}
  1. Menggunakan Custom Konteks: Anda boleh mencipta konteks anda sendiri untuk menggunakan kaedah tak segerak. Pendekatan ini menyediakan lebih banyak kawalan dan keupayaan pengendalian ralat.
static void Main()
{
  AsyncContext.Run(() => MainAsync());
}

static async Task MainAsync()
{
  // Async code goes here
}

Untuk mendapatkan cerapan yang lebih komprehensif tentang aplikasi konsol tak segerak, lawati catatan blog yang disediakan. Ingat, peraturan "atas dan bawah" mungkin tidak digunakan dengan lancar dalam semua senario.

Atas ialah kandungan terperinci Bagaimanakah Saya Menggunakan Kod Asynchronous dengan betul dalam Aplikasi Konsol C#?. 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