C# async await异步编程

背景:做NX二次开发的时候收集了NX操作的操作日志,然后用winform做了个应用读取分析这些日志。每天会积累超过5000多份日志,所以想到了异步编程来解决速度和卡死的问题。一、异步编程和多线程的异同硬件里有个概念叫DMA,也就是直接访问内存不经过CPU处理,这正是异步操作的硬件基础。异步编程无需额外的线程负担,死锁的情况也少,但是和自然人的思维方式有些不一样。而多线程中的各个线程的代...
摘要由CSDN通过智能技术生成

背景:做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执行完毕后,异步函数将在合适的线程上继续执行下面的语句

三、使用任务的异步编程

参考文章:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值