C# 中的 async 和 await

C# 中的 async 和 await

本教程將討論 C# 中的非同步程式設計。

C# 中的非同步程式設計

如果同步應用程式中有任何程序被阻止,則整個應用程式將被阻止並停止響應,直到該特定程序完成為止。在這種情況下,我們可以使用非同步程式設計。通過非同步程式設計,我們的應用程式可以繼續在後臺執行一些獨立的任務,直到執行該特定程序為止。在非同步程式設計中,我們的整個應用程式不僅僅依賴於一個耗時的過程。非同步程式設計用於 I/O 繫結或 CPU 繫結的任務。非同步程式設計的主要用途是建立一個響應式使用者介面,該介面在等待 I/O 繫結或 CPU 繫結的程序完成其執行時不會卡住。awaitasync 關鍵字用於 C# 中的非同步程式設計。await 關鍵字將控制權交還給呼叫函式。await 關鍵字是啟用 C# 非同步程式設計的主要關鍵字。async 關鍵字啟用 await 關鍵字。使用 await 關鍵字的函式必須具有 async 關鍵字,並在 C# 中返回 Task 物件。如果沒有 C# 中的 async 關鍵字,就不能使用 await 關鍵字。下面的程式碼示例演示了 C# 中的同步程式設計。

using System;
using System.Threading.Tasks;

namespace async_and_await {
  class Program {
    public static void process1() {
      for (int i = 0; i < 5; i++) {
        Console.WriteLine("Process 1");
        Task.Delay(100).Wait();
      }
    }
    public static void process2() {
      for (int i = 0; i < 5; i++) {
        Console.WriteLine("Process 2");
        Task.Delay(100).Wait();
      }
    }
    static void Main(string[] args) {
      process1();
      process2();
    }
  }
}

輸出:

Process 1
Process 1
Process 1
Process 1
Process 1
Process 2
Process 2
Process 2
Process 2
Process 2

在上面的程式碼中,函式 process1()process2() 是獨立的程序,但是 process2() 函式必須等待 process1() 函式的完成。可以使用 C# 中的 asyncawait 關鍵字將此簡單的同步程式設計程式碼轉換為非同步程式設計。

using System;
using System.Threading.Tasks;

namespace async_and_await {
  class Program {
    public static async Task process1() {
      await Task.Run(() => {
        for (int i = 0; i < 5; i++) {
          Console.WriteLine("Process 1");
          Task.Delay(100).Wait();
        }
      });
    }
    public static void process2() {
      for (int i = 0; i < 5; i++) {
        Console.WriteLine("Process 2");
        Task.Delay(100).Wait();
      }
    }
    static void Main(string[] args) {
      process1();
      process2();
    }
  }
}

輸出:

Process 2
Process 1
Process 1
Process 2
Process 2
Process 1
Process 1
Process 2
Process 2
Process 1

在上面的程式碼中,我們使用了 asyncawait 關鍵字將前面的示例轉換為非同步程式設計。輸出清楚地表明,process2() 函式不會等待完成 process1() 函式。在 process1() 函式的定義中,我們使用了 async 關鍵字來建議這是一個非同步執行的函式。process1() 函式中的 await 關鍵字將控制元件返回給主函式,然後該主函式呼叫 process2() 函式。控制權在 process1()process2() 函式之間不斷切換,直到 process1() 函式完成為止。

Enjoying our tutorials? Subscribe to DelftStack on YouTube to support us in creating more high-quality video guides. Subscribe
Muhammad Maisam Abbas avatar Muhammad Maisam Abbas avatar

Maisam is a highly skilled and motivated Data Scientist. He has over 4 years of experience with Python programming language. He loves solving complex problems and sharing his results on the internet.

LinkedIn