📅  最后修改于: 2023-12-03 14:39:42.388000             🧑  作者: Mango
在C#中,异步和等待是非常常见的操作,尤其是在需要同时执行多个任务或在访问外部资源时。异步和等待可以极大地提高程序的性能和响应时间。
异步是指在编程时不需要等待某个长时间的操作完成,而是继续执行其他任务。在异步任务完成后,再回到原来的任务继续执行。
在C#中,异步任务使用async
和await
关键字实现。
public async Task<string> DownloadWebPageAsync(string url)
{
using (var client = new HttpClient())
{
var response = await client.GetAsync(url);
var pageContents = await response.Content.ReadAsStringAsync();
return pageContents;
}
}
在这个例子中,我们使用async
和await
关键字来下载网页。请求网页和读取内容的操作都是异步的。
等待是指暂停当前程序的运行,直到某个条件满足。在C#中,我们可以使用Thread.Sleep()
方法来等待一段时间。
Console.WriteLine("Starting...");
Thread.Sleep(1000);
Console.WriteLine("One second later...");
在这个例子中,我们使用Thread.Sleep()
方法来等待一秒钟,然后打印出 "One second later..."。
在许多情况下,我们需要同时使用异步和等待。例如,当我们需要等待异步任务完成后再执行其他任务时,就需要结合使用异步和等待。
public async void DownloadWebPageAndDoSomethingElseAsync(string url)
{
Console.WriteLine("Downloading web page...");
var pageContents = await DownloadWebPageAsync(url);
Console.WriteLine("Web page download complete.");
Console.WriteLine("Doing something else with the web page contents...");
}
在这个例子中,我们首先调用DownloadWebPageAsync
方法来异步下载网页。当下载完成后,我们再继续执行其他任务。这里的其他任务是打印下载完成的消息和做些其他处理。
在使用异步和等待的时候,需要注意以下事项:
async Task
或async void
的方式声明。Task
或Task<T>
。await
时,调用方必须使用async
关键字,并且该方法必须返回Task
或Task<T>
。