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

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

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

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

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

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

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

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

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

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

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

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

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

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

使用async/await关键字实现异步编程,这是比较常用的一种异步实现方式。例如:cQm28资讯网——每日最新资讯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类型实现异步编程,可以利用多核处理器,并发执行多个独立的任务。例如:cQm28资讯网——每日最新资讯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 方法在异步操作完成时执行,并返回异步操作的结果。cQm28资讯网——每日最新资讯28at.com

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

cQm28资讯网——每日最新资讯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模式)

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

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

cQm28资讯网——每日最新资讯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#委托:实现灵活的方法调用

标签:
  • 热门焦点
  • 6月安卓手机好评榜:魅族20 Pro蝉联冠军

    性能榜和性价比榜之后,我们来看最后的安卓手机好评榜,数据来源安兔兔评测,收集时间2023年6月1日至6月30日,仅限国内市场。第一名:魅族20 Pro好评率:95%5月份的时候魅族20 Pro就是
  • 8月总票房已突破10亿!《封神》第一:口碑已经成了

    8月5日消息,据灯塔专业版数据,截至8月5日9时35分,8月总票房(含预售)已突破10亿。其中,《封神》以大比分的优势领先。根据官方消息,目前该片总票房已经超过14.
  • 三言两语说透设计模式的艺术-简单工厂模式

    一、写在前面工厂模式是最常见的一种创建型设计模式,通常说的工厂模式指的是工厂方法模式,是使用频率最高的工厂模式。简单工厂模式又称为静态工厂方法模式,不属于GoF 23种设计
  • 东方甄选单飞:有些鸟注定是关不住的

    文/彭宽鸿编辑/罗卿东方甄选创始人俞敏洪带队的&ldquo;7天甘肃行&rdquo;直播活动已在近日顺利收官。成立后一年多时间里,东方甄选要脱离抖音自立门户的传闻不绝于耳,&ldquo;7
  • 网红炒股不为了赚钱,那就是耍流氓!

    来源:首席商业评论6月26日高调宣布入市,网络名嘴大v胡锡进居然进军了股市。在一次财经媒体峰会上,几个财经圈媒体大佬就&ldquo;胡锡进炒股是否知道认真报道&rdquo;展开讨论。有
  • 认真聊聊东方甄选:如何告别低垂的果实

    来源:山核桃作者:财经无忌爆火一年后,俞敏洪和他的东方甄选依旧是颇受外界关心的&ldquo;网红&rdquo;。7月5日至9日,为期5天的东方甄选&ldquo;甘肃行&rdquo;首次在自有App内直播,
  • 2纳米决战2025

    集微网报道 从三强争霸到四雄逐鹿,2nm的厮杀声已然隐约传来。无论是老牌劲旅台积电、三星,还是誓言重回先进制程领先地位的英特尔,甚至初成立不久的新
  • 超闭合精工铰链 彻底消灭缝隙 三星Galaxy Z Flip5与Galaxy Z Fold5发布

    2023年7月26日,三星电子正式发布了Galaxy Z Flip5与Galaxy Z Fold5。三星新一代折叠屏手机采用超闭合精工铰链,让折叠后的缝隙不再可见。同时,配合处
  • 2299元起!iQOO Pad开启预售:性能最强天玑平板

    5月23日,iQOO如期举行了新品发布会,除了首发安卓最强旗舰处理器的iQOO Neo8系列新机外,还在发布会上推出了旗下首款平板电脑——iQOO Pad,其搭载了天玑
Top