博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
异步编程
阅读量:7026 次
发布时间:2019-06-28

本文共 1095 字,大约阅读时间需要 3 分钟。

异步编程。

  1. 在.net中如何使用多线程和异步函数来解决计算限制、耗时等这些不友好用户体验的问题。
  2. 异步编程中比较关心,也是比较重要的技术点在于,1)当异步线程在工作完成时如何通知调用线程,2)当异步线程出现异常的时候该如何处理,3)异步线程工作的进度如何实时的通知调用线程。4)如何在调用线程中取消正在工作的异步线程,并进行回滚操作。
  3. 用WorkPro方法实例化一个DoWork类型的对象d
  4. 异步函数内部所使用的线程均是线程池中的工作线程,由线程池去分配管理的。

  5. 在.net还提供许多类的BeinXXX()和EndXXX()的异步版本,比如文件的读写等,具体可以查阅相关的资料。

  6. 建立一个专用线程是非常耗用系统的资源,建议是使用线程池中的线程。
  7. Thread类的使用虽然简单,但是它还是有一定的劣势的,一般不推荐使用。
    1)Thread类创建的是一个专用线程,建立一个专用线程是非常耗用系统的资源,建议是使用线程池中的线程。
    2)Thread类不能很好的和调用线程进行交互,当任务完成时不能及时的通知,在调用线程也不能随时的取消正在进行的任务。
    另外在以下情况下,就只能选择使用Thread类了。
    1)执行任务的线程要以非普通的优先级去执行,因为线程池的线程都是以普通优先级运行的。
    2)执行任务的线程要表现为一个前台线程,因为线程池的线程始终都是一个后台线程。
    3)异步执行的任务需要长时间的,那么就可以使用Thread类为该任务建立一个专用线程。
  8. Task

    如果需要异步函数有返回值,那么此时就需要使用Task泛型类(派生自Task)来实现,其中TResult代表返回的类型。
    我们还可以传递一些TaskCreationOptions标志来控制Task的执行方式

  9. 在Winform窗体程序设计中TaskScheduler尤为有用,为什么这么说呢?因为在窗体程序中的控件都是有ui线程去创建,而我们所执行的后台任务使用线程都是线程池中的工作线程,所以当我们的任务完成之后需要反馈到Winform控件上,但是控件创建的线程和任务执行的线程不是同一个线程,如果在任务线程中去更新控件就会导致控件对象安全问题会出现异常。所以操作控件,就必须要使用ui线程去操作。

  10. 因此在ContinueWith获取任务执行的结果的并反馈到控件的任务调度上不能使用线程池任务调用器,而要使用同步上下文任务调度器去调度,即采用ui这个线程去调用ContinueWith方法所绑定的回调用函数即Action类型的委托

转载于:https://www.cnblogs.com/rechen/p/5268892.html

你可能感兴趣的文章
java面试题——中间件&&数据库&&redis(三)
查看>>
batch normalization在测试时的问题
查看>>
PhoneGap 简单使用
查看>>
双向链表_Java
查看>>
多玩笔试题
查看>>
Windows API 编程-----DLL编程之禁止加载自己
查看>>
Python时间和日期
查看>>
[解题报告]HDU 1096 A+B for Input-Output Practice (VIII)
查看>>
从零开始学习Sencha Touch MVC应用之十五
查看>>
网络基础
查看>>
CSS基本选择器
查看>>
二叉树节点的删除
查看>>
计算机网络面试总结
查看>>
在线看电视(清晰方便)
查看>>
AngularJs中,如何在render完成之后,执行Js脚本
查看>>
构造函数
查看>>
Python 函数参数传递机制.
查看>>
【转】Eclipse中10个最有用的快捷键组合
查看>>
SignalR系列续集[系列6:使用自己的连接ID]
查看>>
C#使用Xamarin开发可移植移动应用进阶篇(7.使用布局渲染器,修改默认布局),附源码...
查看>>