.NET回调异步编程
.NET中BeginInvoke等异步方法要等待异步方法执行完毕后才能拿到执行的结果,期间主线程均处于等待状态。而回调和它们最大的区别是,在调用 BeginInvoke时只要提供了回调方法,那么主线程就不必要再等待异步线程工作完毕,异步线程在工作结束后会主动调用我们提供的回调方法,并在回调 方法中做相应的处理。
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Text;
- using System.Threading;
- namespace 异步调用实现方法汇总4
- {
- /// <summary>
- /// 异步调用方法总结:
- /// 在调用BeginInvoke时只要提供了回调方法,那么主线程就不必要再等待异步线程工作完毕,
- /// 异步线程在工作结束后会主动调用我们提供的回调方法,并在回调方法中做相应的处理,例如显示异步调用的结果。
- /// </summary>
- class Program
- {
- public delegate void PrintDelegate(string s);
- static void Main(string[] args)
- {
- PrintDelegate printDelegate = Print;
- Console.WriteLine("主线程.");
- printDelegate.BeginInvoke("Hello world.", PrintComeplete, printDelegate);
- Console.WriteLine("主线程继续执行...");
- Console.WriteLine("Press any key to continue...");
- Console.ReadKey(true);
- }
- public static void Print(string s)
- {
- Console.WriteLine("当前线程:"+s);
- Thread.Sleep(5000);
- }
- //回调方法要求
- //1.返回类型为void
- //2.只有一个参数IAsyncResult
- public static void PrintComeplete(IAsyncResult result)
- {
- (result.AsyncState as PrintDelegate).EndInvoke(result);
- Console.WriteLine("当前线程结束." + result.AsyncState.ToString());
- }
- }
- }
============ 欢迎各位老板打赏~ ===========
与本文相关的文章
- · The instance of entity type ‘Customer’ cannot be tracked because another instance with the same key value for {‘Id’} is already being tracked.
- · .NET8实时更新nginx ip地址归属地
- · 解决.NET Blazor子组件不刷新问题
- · .NET8如何在普通类库中引用 Microsoft.AspNetCore
- · .NET8 Mysql SSL error
- · ASP.NET Core MVC的Razor视图渲染中文乱码的问题
- · .NETCORE 依赖注入服务生命周期
- · asp.net zero改mysql
- · .NET5面试汇总
- · .Net连接Mysql数据库的Convert Zero Datetime日期问题
- · vue使用element-ui中的Message 、MessageBox 、Notification
- · Asp.Net Core Filter 深入浅出的那些事-AOP