MST

星途 面试题库

面试题:网络编程中C# 的async/await 与协程的基础实践

在C# 网络编程场景下,比如实现一个简单的HTTP请求获取网页内容的功能,请阐述如何使用async/await 关键字来异步处理该请求。如果使用协程概念来类比,async/await 在这个过程中扮演怎样的角色?
16.8万 热度难度
后端开发网络编程

知识考点

AI 面试

面试题答案

一键面试
  1. 使用async/await实现HTTP请求获取网页内容

    • 首先,需要引入System.Net.Http命名空间,它提供了用于处理HTTP请求的类。
    • 示例代码如下:
    using System;
    using System.Net.Http;
    using System.Threading.Tasks;
    
    class Program
    {
        static async Task Main()
        {
            using (HttpClient client = new HttpClient())
            {
                try
                {
                    string url = "https://example.com";//替换为实际网址
                    // 使用`await`等待`GetStringAsync`操作完成,这是一个异步操作
                    string content = await client.GetStringAsync(url);
                    Console.WriteLine(content);
                }
                catch (HttpRequestException e)
                {
                    Console.WriteLine($"请求出错: {e.Message}");
                }
            }
        }
    }
    
    • 在上述代码中:
      • async关键字用于标记一个异步方法,Main方法被标记为async,表示它是一个异步操作的入口。
      • await关键字只能在async方法内部使用。client.GetStringAsync(url)是一个返回Task<string>的异步方法,await会暂停当前方法的执行,直到这个Task<string>完成,然后获取其结果(即网页内容字符串)。
  2. 与协程概念类比async/await的角色

    • 在协程概念中,协程允许程序在执行过程中暂停和恢复执行。
    • async/await在C#中扮演类似的角色:
      • async标记的方法类似于协程的定义,它表明这个方法可以包含异步操作。
      • await类似于协程中的暂停点。当执行到await时,当前的异步方法暂停执行,控制权返回给调用者,而其他代码(比如主线程中的其他任务)可以继续执行。当await等待的异步操作完成后,异步方法从暂停点恢复执行,继续处理后续代码。所以async/await组合提供了一种类似协程的异步编程模型,使得异步代码可以像同步代码一样编写和阅读,提高了代码的可读性和可维护性。