翼度科技»论坛 编程开发 .net 查看内容

C#中await /async 的使用场景,优点,使用方法介绍

4

主题

4

帖子

12

积分

新手上路

Rank: 1

积分
12
 
async/await 是 C# 中异步编程的关键特性,它使得异步代码编写更为简单和直观。下面深入详细描述了 async/await 的使用场景、优点以及一些高级使用方法,并提供了相应的实例源代码。
使用场景:


  • I/O 操作: 异步编程特别适用于涉及 I/O 操作(如文件读写、网络请求等)的场景。在等待 I/O 操作完成的过程中,CPU 可以继续执行其他任务,提高程序的并发性。
  • GUI 应用程序: 在 GUI 应用程序中,避免阻塞主线程是至关重要的。使用 async/await 可以确保在进行长时间运行的任务时,GUI 界面保持响应。
  • 并行编程: 在涉及多个任务的并行编程中,async/await 可以简化代码的编写,提高代码的可读性和维护性。
  • Web 服务: 在处理 Web 请求时,异步操作可以确保服务器资源的高效利用,提高系统的吞吐量。
优点:


  • 简化异步编程: async/await 使得异步编程更加直观和易于理解。代码看起来像是同步的,但实际上是异步执行的。
  • 避免阻塞: 使用 async/await 可以避免在等待 I/O 操作完成时阻塞线程,提高程序的并发性。
  • 提高性能: 在异步操作中,CPU 可以在等待的过程中执行其他任务,提高系统的整体性能。
  • 简化错误处理: 使用 try/catch 结构可以捕获异步操作中的异常,使错误处理更加简便。
使用方法:

基本使用:
  1. using System;
  2. using System.Threading.Tasks;
  3. class Program
  4. {
  5.     static async Task Main()
  6.     {
  7.         Console.WriteLine("Start");
  8.         await DoAsyncTask();
  9.         Console.WriteLine("End");
  10.     }
  11.     static async Task DoAsyncTask()
  12.     {
  13.         Console.WriteLine("Async Task Start");
  14.         await Task.Delay(2000); // 模拟异步操作
  15.         Console.WriteLine("Async Task End");
  16.     }
  17. }
复制代码
高级使用方法:

  • 并发执行多个异步任务:
  1. using System;
  2. using System.Threading.Tasks;
  3. class Program
  4. {
  5.     static async Task Main()
  6.     {
  7.         Console.WriteLine("Start");
  8.         Task task1 = DoAsyncTask("Task 1", 2000);
  9.         Task task2 = DoAsyncTask("Task 2", 1000);
  10.         await Task.WhenAll(task1, task2);
  11.         Console.WriteLine("End");
  12.     }
  13.     static async Task DoAsyncTask(string taskName, int delay)
  14.     {
  15.         Console.WriteLine($"{taskName} Start");
  16.         await Task.Delay(delay);
  17.         Console.WriteLine($"{taskName} End");
  18.     }
  19. }
复制代码

  • 取消异步操作:
  1. using System;
  2. using System.Threading;
  3. using System.Threading.Tasks;
  4. class Program
  5. {
  6.     static async Task Main()
  7.     {
  8.         Console.WriteLine("Start");
  9.         CancellationTokenSource cts = new CancellationTokenSource();
  10.         Task task = DoAsyncTask(cts.Token);
  11.         // 模拟一段时间后取消任务
  12.         await Task.Delay(1000);
  13.         cts.Cancel();
  14.         try
  15.         {
  16.             await task;
  17.         }
  18.         catch (TaskCanceledException)
  19.         {
  20.             Console.WriteLine("Task canceled");
  21.         }
  22.         Console.WriteLine("End");
  23.     }
  24.     static async Task DoAsyncTask(CancellationToken cancellationToken)
  25.     {
  26.         Console.WriteLine("Async Task Start");
  27.         await Task.Delay(5000, cancellationToken); // 模拟异步操作
  28.         Console.WriteLine("Async Task End");
  29.     }
  30. }
复制代码
这些示例展示了 async/await 在不同场景下的使用方法,包括基本使用、并发执行多个异步任务以及取消异步操作。希望这些例子对你理解 async/await 的使用有所帮助。
 



来源:https://www.cnblogs.com/hanbing81868164/archive/2023/12/08/17884355.html
免责声明:由于采集信息均来自互联网,如果侵犯了您的权益,请联系我们【E-Mail:cb@itdo.tech】 我们会及时删除侵权内容,谢谢合作!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x

举报 回复 使用道具