• C#异步编程async和await关键字的用法
  • 发布于 2个月前
  • 128 热度
    0 评论
在C#编程语言中,async和await是两个关键字,它们共同用于简化异步编程。异步编程是一种编程模式,它允许程序在等待某些操作(通常是I/O操作,如网络请求或磁盘读写)完成时,不会阻塞当前的执行线程,从而提高应用程序的响应性和性能。

定义
async:async关键字用于定义一个方法,表示该方法内部包含异步操作,即该方法可能在执行过程中不会立即完成,而是会在某个点等待一个异步操作完成。被async修饰的方法通常会返回一个Task或Task<TResult>对象,表示一个正在进行的操作。

await:await关键字只能在被async修饰的方法内部使用。它用于等待一个异步操作完成,而不会阻塞当前线程。await后面通常跟着一个返回Task或Task<TResult>的异步方法调用。当await表达式执行时,它会暂停当前方法的执行,直到所等待的异步操作完成,然后继续执行方法中的后续代码。

使用
下面是一个简单的示例,展示了如何在C#中使用async和await关键字:
using System;
using System.Net.Http;
using System.Threading.Tasks;

class Program
{
    static async Task Main(string[] args) // Main方法也可以使用async和await(从C# 7.1开始)
    {
        string data = await FetchDataFromWebAsync("https://example.com");
        Console.WriteLine(data);
    }

    static async Task<string> FetchDataFromWebAsync(string url)
    {
        using (HttpClient client = new HttpClient())
        {
            // 使用await等待异步网络请求完成
            HttpResponseMessage response = await client.GetAsync(url);
            response.EnsureSuccessStatusCode();
            string responseBody = await response.Content.ReadAsStringAsync();
            return responseBody;
        }
    }
}
在这个示例中,FetchDataFromWebAsync方法被标记为async,因为它内部执行了异步的网络请求。await client.GetAsync(url)和await response.Content.ReadAsStringAsync()这两行代码都使用了await关键字来等待异步操作完成。

Main方法也被标记为async,并且它使用了await来等待FetchDataFromWebAsync方法的执行结果。由于Main方法是程序的入口点,并且从C# 7.1开始,Main方法也被允许是异步的,这极大地简化了异步代码的编写。

使用async和await的好处是它们提供了一种直观的方式来编写异步代码,而不需要显式地处理回调方法或复杂的线程同步问题。编译器会自动生成必要的状态机代码来管理异步操作的执行流程。

注意:尽管async和await使得异步代码看起来像同步代码,但程序的执行仍然是异步的。这意味着在等待异步操作完成时,不会阻塞调用线程,从而提高了应用程序的响应性。
用户评论