这篇文章主要介绍了c# 使用异步编程的方法,文中讲解非常细致,帮助大家更好的理解c# 异步编程,感兴趣的朋友可以了解下
怎么使用异步,就是用委托进行处理,如果委托对象在调用列表中只有一个方法,它就可以异步执行这个方法。委托类有两个方法,叫做BeginInvoke和EndInvoke,它们是用来异步执行使用。
异步有三种模式
- 等待模式,在发起了异步方法以及做了一些其它处理之后,原始线程就中断,并且等待异步方法完成之后再继续。
- 轮询模式,原始线程定期检查发起的线程是否完成,如果没有则可以继续做一些其它的事情。
- 回调模式,原始线程一直在执行,无需等待或检查发起的线程是否完成。在发起的线程中的引用方法完成之后,发起的线程就会调用回调方法,由回调方法在调用EndInvoke之前处理异步方法的结构。
在学习异步编程之前,先看看BeginInvoke和EndInvoke方法。
静态变量:静态变量使用static 修饰符进行声明在所属类被装载时创建通过类进行访问所属类的所有实例的同一静态变量都是同一个值;
非静态变量:不带有static 修饰符声明的变量称作非静态变量在类被实例化时创建通过对象进行访问同一个类的不同实例的同一非静态变量可以是不同的值
BeginInvoke方法
在调用BeginInvoke时,参数列表中的实参组成如下:
1) 引用方法需要的参数。
2) 两个额外的参数——callback参数和state参数。
BeginInvoke从线程池中获取一个线程并且在新的线程开始时运行引用方法。
BeginInvoke返回给调用线程一个实现IasyncResult接口的对象。这个接口引用包含了异步方法的当前状态,原始线程然后可以继续执行。
EndInvoke方法
它接受一个由BeginInvoke方法返回的IasyncResult对象的引用,并找到它关联的线程。
如果线程池的线程已经退出,EndInvoke做如下的事情。
1) 它清理退出线程的状态并且释放它的资源。
2) 它找到引用方法返回的值并且把它的值作为返回值。
如果当EndInvoke被调用时线程池的线程仍然在运行,调用线程就会停止并等待,直到清理完毕并返回值。因为EndInvoke是为开启的线程进行清理,所以必须确保对每一个 BeginInvoke都调用EndInvoke。
如果异步方法触发了异常,在调用EndInvoke时会抛出异常。
等待模式
在这种模式里,原始线程发起一个异步方法的调用,做一些其它处理,然后停止并等待,直到开启的线程结束。如下图
以上就是c# 使用异步编程的方法的详细内容,更多关于c# 异步编程的资料请关注得得之家其它相关文章!
本文标题为:c# 使用异步编程的方法
- WPF使用DrawingContext实现绘制刻度条 2023-07-04
- Oracle中for循环的使用方法 2023-07-04
- .NET CORE DI 依赖注入 2023-09-27
- 如何使用C# 捕获进程输出 2023-03-10
- 在C# 8中如何使用默认接口方法详解 2023-03-29
- user32.dll 函数说明小结 2022-12-26
- C# 使用Aspose.Cells 导出Excel的步骤及问题记录 2023-05-16
- Unity3D实现渐变颜色效果 2023-01-16
- Unity Shader实现模糊效果 2023-04-27
- c# 模拟线性回归的示例 2023-03-14