当前位置:首页 > 科技  > 软件

.NET异步有多少种实现方式?(异步编程提高系统性能、改善用户体验)

来源: 责编: 时间:2024-05-16 17:41:51 254观看
导读想要知道.NET异步有多少种实现方式,首先我们要知道.NET提供的执行异步操作的三种模式,然后再去了解.NET异步实现的四种方式。.NET执行异步操作的三种模式(1) 基于任务的异步模式 (TAP)【推荐使用】 :该模式使用单一方法

想要知道.NET异步有多少种实现方式,首先我们要知道.NET提供的执行异步操作的三种模式,然后再去了解.NET异步实现的四种方式。Y0t28资讯网——每日最新资讯28at.com

Y0t28资讯网——每日最新资讯28at.com

.NET执行异步操作的三种模式

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

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

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

.NET异步编程有什么作用?

  • 提高性能和资源利用率:异步编程可以在等待 I/O 操作完成的同时释放线程资源,使得线程能够继续执行其他任务,从而提高了系统的资源利用率和性能。
  • 改善用户体验:通过异步编程,可以避免在等待长时间操作完成时出现界面卡顿或无响应的情况,从而改善用户体验,使应用程序更加流畅和响应。
  • 简化编程模型:使用 C# 提供的async 和 await 关键字可以使异步编程变得更加简洁和易于理解,避免了传统的回调地狱(callback hell),使代码更具可读性和可维护性。
  • 提高并发性:通过异步编程,可以更有效地处理并发请求,从而提高系统的并发性能,使得应用程序能够更好地处理大量用户请求。
  • 支持大规模并行编程:异步编程模型使得在大规模并行编程中更容易管理和控制异步任务的执行,提供了更灵活的并发编程方式。

总的来说,异步编程在提高系统性能、改善用户体验、简化编程模型和支持并行编程方面发挥着重要作用,是现代软件开发中不可或缺的重要技术之一。Y0t28资讯网——每日最新资讯28at.com

Y0t28资讯网——每日最新资讯28at.com

1.异步方法(Async Method TAP模式)

使用async/await关键字实现异步编程,这是比较常用的一种异步实现方式。例如:Y0t28资讯网——每日最新资讯28at.com

        /// <summary>        /// 异步方法(Async Method TAP模式)        /// </summary>        /// <returns></returns>        public static async Task TestDoSomeAsync()        {            await Task.Delay(1000 * 10).ConfigureAwait(false); //等待10秒            Console.WriteLine("Async Method Completed.");        }

2.任务并行库(TPL, Task Parallel Library TAP模式)

通过 Task 和 Task类型实现异步编程,可以利用多核处理器,并发执行多个独立的任务。例如:Y0t28资讯网——每日最新资讯28at.com

        /// <summary>        /// 任务并行库(TPL, Task Parallel Library TAP模式)        /// </summary>        public static void TestTaskParallel()        {            var task1 = Task.Run(() =>            {                Console.WriteLine("Task 1 Completed.");            });            var task2 = Task.Run(() =>            {                Console.WriteLine("Task 2 Completed.");            });            Task<int> task3 = Task.Factory.StartNew(() =>            {                Console.WriteLine("Task 3 Completed.");                return 20; // 返回一个整数值            });            //等待所有任务完成            Task.WaitAll(task1, task2, task3);        }

3.Asynchronous Programming Model(APM模式)

是一种经典的异步编程模式,需要手动创建回调函数,用于处理完成或错误的通知。可以通过 IAsyncResult 设计模式的 Begin 和 End 方法来实现,其中 Begin 方法开始异步操作,而 End 方法在异步操作完成时执行,并返回异步操作的结果。Y0t28资讯网——每日最新资讯28at.com

注意:在 .NET Core 或 .NET 5+ 等新版本中,BeginInvoke 方法已经被弃用并不再支持,因此可能会导致 System.PlatformNotSupportedException 异常,不过在.NET FX环境是支持的。Y0t28资讯网——每日最新资讯28at.com

Y0t28资讯网——每日最新资讯28at.com

        /// <summary>        /// Asynchronous Programming Model(APM模式)        /// </summary>        public static void TestAPMAsync()        {            // 创建一个 AsyncCallback 委托,用于处理异步操作完成后的回调            var callback = new AsyncCallback(AsyncOperationCallback);            // 创建一个异步委托实例,表示要异步执行的操作            var asyncMethod = new Func<int, string>(AsyncMethod);            // 开始异步操作            var result = asyncMethod.BeginInvoke(88, callback, asyncMethod);            Console.WriteLine($"TestAPMAsync Completed.");            Console.ReadLine();        }        private static string AsyncMethod(int parameter)        {            Console.WriteLine("AsyncMethod开始执行了...");            return $"异步操作完成,参数为:{parameter}。";        }        private static void AsyncOperationCallback(IAsyncResult result)        {            try            {                // 从异步状态对象中获取返回的异步委托                Func<int, string> asyncMethod = (Func<int, string>)result.AsyncState;                string message = asyncMethod.EndInvoke(result);                Console.WriteLine(message);            }            catch (Exception ex)            {                Console.WriteLine($"异步操作发生异常:{ex.Message}");            }        }

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

是一种已过时的异步编程模式,需要使用事件来实现异步编程。Y0t28资讯网——每日最新资讯28at.com

需要注意的是,EAP 模式通过事件来实现异步编程,相对于 APM 模式更容易理解,同时也避免了手动处理回调函数等细节工作。但是,EAP 模式并不支持 async/await 异步关键字,因此在一些特定的场景下可能不够灵活。Y0t28资讯网——每日最新资讯28at.com

Y0t28资讯网——每日最新资讯28at.com

        /// <summary>        /// Event-based Asynchronous Pattern(EAP模式)        /// </summary>        static void Main(string[] args)        {            var asyncObj = new MyAsyncClass();            // 订阅异步操作完成事件            asyncObj.OperationNameCompleted += AsyncObjOperationNameCompleted;            // 启动异步操作            asyncObj.DoWorkAsync(10);            Console.ReadLine();        }        /// <summary>        /// 异步操作完成事件的处理方法        /// </summary>        /// <param name="result">result</param>        private static void AsyncObjOperationNameCompleted(int result)        {            Console.WriteLine($"异步操作完成,结果为: {result}");        }        public class MyAsyncClass : Component        {            /// <summary>            /// 声明一个委托类型,用于定义异步操作的方法签名            /// </summary>            /// <param name="arg"></param>            /// <returns></returns>            public delegate void MyAsyncDelegate(int arg);            /// <summary>            /// 声明一个事件,用于通知异步操作的完成            /// </summary>            public event MyAsyncDelegate OperationNameCompleted;            /// <summary>            /// 异步执行方法,接受一个参数 arg            /// </summary>            /// <param name="arg"></param>            public void DoWorkAsync(int arg)            {                // 将异步操作放入线程池中执行                ThreadPool.QueueUserWorkItem(new WaitCallback(DoWork), arg);            }            /// <summary>            /// 真正的异步操作            /// </summary>            /// <param name="obj"></param>            private void DoWork(object obj)            {                int arg = (int)obj;                int res = arg + 1;                // 触发事件,传递异步操作的结果                OperationNameCompleted?.Invoke(res);            }        }

本文链接:http://www.28at.com/showinfo-26-88713-0.html.NET异步有多少种实现方式?(异步编程提高系统性能、改善用户体验)

声明:本网页内容旨在传播知识,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。邮件:2376512515@qq.com

上一篇: WinForm 跨线程 UI 操作常用控件类大全

下一篇: C#委托:实现灵活的方法调用

标签:
  • 热门焦点
  • 官方承诺:K60至尊版将会首批升级MIUI 15

    全新的MIUI 15今天也有了消息,在官宣了K60至尊版将会搭载天玑9200+处理器和独显芯片X7的同时,Redmi给出了官方承诺,K60至尊重大更新首批升级,会首批推送MIUI 15。也就是说虽然
  • 对标苹果的灵动岛 华为带来实况窗功能

    继苹果的灵动岛之后,华为也在今天正式推出了“实况窗”功能。据今天鸿蒙OS 4.0的现场演示显示,华为的实况窗可以更高效的展现出实时通知,比如锁屏上就能看到外卖、打车、银行
  • Redmi Pad评测:红米充满野心的一次尝试

    从Note系列到K系列,从蓝牙耳机到笔记本电脑,红米不知不觉之间也已经形成了自己颇有竞争力的产品体系,在中端和次旗舰市场上甚至要比小米新机的表现来得更好,正所谓“大丈夫生居
  • 6月安卓手机好评榜:魅族20 Pro蝉联冠军

    性能榜和性价比榜之后,我们来看最后的安卓手机好评榜,数据来源安兔兔评测,收集时间2023年6月1日至6月30日,仅限国内市场。第一名:魅族20 Pro好评率:95%5月份的时候魅族20 Pro就是
  • 企业采用CRM系统的11个好处

    客户关系管理(CRM)软件可以为企业提供很多的好处,从客户保留到提高生产力。  CRM软件用于企业收集客户互动,以改善客户体验和满意度。  CRM软件市场规模如今超过580
  • 每天一道面试题-CPU伪共享

    前言:了不起:又到了每天一到面试题的时候了!学弟,最近学习的怎么样啊 了不起学弟:最近学习的还不错,每天都在学习,每天都在进步! 了不起:那你最近学习的什么呢? 了不起学弟:最近在学习C
  • 三星Galaxy Z Fold/Flip 5国行售价曝光 :最低7499元/12999元起

    据官方此前宣布,三星将于7月26日也就是明天在韩国首尔举办Unpacked活动,届时将带来带来包括Galaxy Buds 3、Galaxy Watch 6、Galaxy Tab S9、Galaxy
  • 最薄的14英寸游戏笔记本电脑 Alienware X14已可以购买

    2022年1月份在国际消费电子展(CES2022)上首次亮相的Alienware新品——Alienware X14现在已经可以购买了,这款笔记本电脑被誉为世界上最薄的 14 英寸游戏笔
  • 北京:科技教育体验基地开始登记

      北京“科技馆之城”科技教育体验基地登记和认证工作日前启动。首批北京科技教育体验基地拟于2023年全国科普日期间挂牌,后续还将开展常态化登记。  北京科技教育体验基
Top