📜  c# async sleep - C# (1)

📅  最后修改于: 2023-12-03 14:39:42.388000             🧑  作者: Mango

C#中的异步和等待

在C#中,异步和等待是非常常见的操作,尤其是在需要同时执行多个任务或在访问外部资源时。异步和等待可以极大地提高程序的性能和响应时间。

异步

异步是指在编程时不需要等待某个长时间的操作完成,而是继续执行其他任务。在异步任务完成后,再回到原来的任务继续执行。

在C#中,异步任务使用asyncawait关键字实现。

异步的示例
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;
    }
}

在这个例子中,我们使用asyncawait关键字来下载网页。请求网页和读取内容的操作都是异步的。

等待

等待是指暂停当前程序的运行,直到某个条件满足。在C#中,我们可以使用Thread.Sleep()方法来等待一段时间。

等待的示例
Console.WriteLine("Starting...");
Thread.Sleep(1000);
Console.WriteLine("One second later...");

在这个例子中,我们使用Thread.Sleep()方法来等待一秒钟,然后打印出 "One second later..."。

async和等待的结合

在许多情况下,我们需要同时使用异步和等待。例如,当我们需要等待异步任务完成后再执行其他任务时,就需要结合使用异步和等待。

async和等待的示例
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 Taskasync void的方式声明。
  • 异步方法的返回类型必须是TaskTask<T>
  • 在异步方法中使用await时,调用方必须使用async关键字,并且该方法必须返回TaskTask<T>