C# .NET 异步实现方式

一、异步编程模式

.NET 提供了执行异步操作的三种模式:

  • 基于任务的异步模式 (TAP) ,该模式使用单一方法表示异步操作的开始和完成。 TAP 是在 .NET Framework 4 中引入的。 这是在 .NET 中进行异步编程的推荐方法。 C# 中的 async 和 await 关键词以及 Visual Basic 中的 Async 和 Await 运算符为 TAP 添加了语言支持。 有关详细信息,请参阅基于任务的异步模式 (TAP)

  • 基于事件的异步模式 (EAP),是提供异步行为的基于事件的旧模型。 这种模式需要后缀为 Async 的方法,以及一个或多个事件、事件处理程序委托类型和 EventArg 派生类型。 EAP 是在 .NET Framework 2.0 中引入的。 建议新开发中不再使用这种模式。 有关详细信息,请参阅基于事件的异步模式 (EAP)

  • 异步编程模型 (APM) 模式(也称为 IAsyncResult 模式),这是使用 IAsyncResult 接口提供异步行为的旧模型。 在这种模式下,同步操作需要 Begin 和 End 方法(例如,BeginWrite 和 EndWrite以实现异步写入操作)。 不建议新的开发使用此模式。 有关详细信息,请参阅异步编程模型 (APM)

二、异步编程实现

1、异步方法

        最常用的方法是,使用await/async关键字实现异步编程的开发模式

 public async Task TestDoSomeAsync()
    {
        await Task.Delay(1000*10);
        Console.WriteLine("异步方法实现");
    }

2、任务并行库

        可以利用多核处理器,并发执行多个独立的任务,通过 Task 和 Task<T> 类型实现异步编程

        public static void Task()
        {
            var task1 = Task.Run(() =>
            {
                Console.WriteLine("Task 1 完成");
            });

            var task2 = Task.Run(() =>
            {
                Console.WriteLine("Task 2 完成");
            });

            Task<int> task3 = Task.Factory.StartNew(() =>
            {
                Console.WriteLine("Task 3 完成");
                return 666;
            });

            //等待所有任务完成
            Task.WaitAll(task1, task2, task3);
        }

3、Asynchronous Programming Model(APM模式)

        经典的异步编程模式,需要手动创建回调函数,用于处理完成或错误的通知。可以通过 IAsyncResult 设计模式的 Begin 和 End 方法来实现,其中 Begin 方法开始异步操作,而 End 方法在异步操作完成时执行,并返回异步操作的结果。

4、Event-based Asynchronous Pattern(EAP模式)

        一种已过时的异步编程模式,需要使用事件来实现异步编程。

三、总结

        不同的方法模式各有各的好处,应视情况和场景而定。

相关推荐

  1. React的@reduxjs/toolkit的异步方法处理和实现

    2024-06-09 07:44:04       27 阅读
  2. udp异步方式接收消息

    2024-06-09 07:44:04       56 阅读
  3. Vue前端异步方法

    2024-06-09 07:44:04       49 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-06-09 07:44:04       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-06-09 07:44:04       101 阅读
  3. 在Django里面运行非项目文件

    2024-06-09 07:44:04       82 阅读
  4. Python语言-面向对象

    2024-06-09 07:44:04       91 阅读

热门阅读

  1. 使用 LLaMA-Factory 实现对大模型函数调用功能

    2024-06-09 07:44:04       30 阅读
  2. 二叉树----7-3 列出叶结点

    2024-06-09 07:44:04       24 阅读
  3. bat指令踩坑记录

    2024-06-09 07:44:04       29 阅读
  4. Web Dart前端:探索、挑战与未来展望

    2024-06-09 07:44:04       34 阅读
  5. 计算机视觉中的low-level与 high-level任务

    2024-06-09 07:44:04       37 阅读
  6. python记录之字符串

    2024-06-09 07:44:04       40 阅读
  7. Playwright 这个强大的自动化测试工具

    2024-06-09 07:44:04       24 阅读
  8. 安装 hbase(伪分布式)

    2024-06-09 07:44:04       25 阅读
  9. 密码学基本概念

    2024-06-09 07:44:04       30 阅读
  10. Python为项目中添加上彩色日志

    2024-06-09 07:44:04       29 阅读
  11. perl use HTTP::Server::Simple 轻量级 http server

    2024-06-09 07:44:04       40 阅读
  12. 面试 Redis 八股文十问十答第二期

    2024-06-09 07:44:04       30 阅读
  13. ASP.NET Core 中使用基本消息的 RabbitMQ 消费者

    2024-06-09 07:44:04       29 阅读