背景:做NX二次开发的时候收集了NX操作的操作日志,然后用winform做了个应用读取分析这些日志。每天会积累超过5000多份日志,所以想到了异步编程来解决速度和卡死的问题。
一、异步编程和多线程的异同
硬件里有个概念叫DMA,也就是直接访问内存不经过CPU处理,这正是异步操作的硬件基础。异步编程无需额外的线程负担,死锁的情况也少,但是和自然人的思维方式有些不一样。而多线程中的各个线程的代码还是顺序执行的,自然人理解起来简单一些,但是线程的滥用反而会造成很多问题。
所以适用场合分别为:
异步:直接的文件、网络的读写,还包括数据库操作、Web Service、HttpRequest以及.net Remoting等跨进程的调用
多线程:需要长时间CPU运算的场合
二、异步函数简介
直接用<C# in Depth>的介绍:
async Task<int> AsyncFunction()
{
var value = await SomeLongTimeFunction();
DoUpdateOrSomething();
}
用了async修饰符声明了的函数AsyncFunction中,用await修饰某个耗时操作的表达式SomeLongTimeFunction().如果SomeLongTimeFunction没有完成那么这个异步函数AsyncFunction会立即返回。当SomeLongTimeFunction执行完毕后,异步函数将在合适的线程上继续执行下面的语句

本文探讨了C#中的异步编程与多线程的区别,指出异步编程适用于文件、网络读写等场景,而多线程适合CPU密集型任务。详细介绍了async和await关键字的工作机制,并通过实例展示了如何使用Task进行异步编程,特别是在UI线程中避免阻塞。同时,提到了跨线程访问UI控件的注意事项。
最低0.47元/天 解锁文章
500

被折叠的 条评论
为什么被折叠?



