首页 新闻 会员 周边

C#中的异步I/O函数是怎样实现的?

0
悬赏园豆:20 [已解决问题] 解决于 2019-01-21 12:20

在C#中,像System.IO.StreamReader.ReadToEndAsync()这样的异步方法是怎样实现异步I/O的功能的?如果自己写I/O设备的驱动,怎样能使用Task实现类似的异步通信功能?

smartgoogle的主页 smartgoogle | 初学一级 | 园豆:41
提问于:2019-01-03 21:26
< >
分享
最佳答案
0

def fun()
new Thread(System.IO.StreamReader.Read).Start();

上面就是一个异步函数。
原则上你可以这么理解 ->基于os上的异步 通常 在线程外执行一个函数,从而你当前的代码不用等待异步线程内的过程,仅仅是等待一个可以忽略的函数及线程调用的过程。

而Task优于Thread,是因为重用,类似于线程池一样的原理,本质还是那样的,至于async和await是语言进化,简化你写代码的行数;

比如上面的异步方式:假设需要等待,并且得到一个返回值,然后判断执行后续操作,那么传统的方式将会写不少代码,且如果Continue到线程的话,还需要重新创建Thread。
而Task(1).Continue(2)一行代码可以写完(对应关键字await也是在Task上的一种关键字简化)。

进化实现:
def fun()
return new Task.Run(System.IO.StreamReader.Read);

收获园豆:20
花飘水流兮 | 专家六级 |园豆:13560 | 2019-01-04 15:50
其他回答(2)
0

推荐阅读 Async in depth

dudu | 园豆:31007 (高人七级) | 2019-01-03 21:38
0

.net 不是开源了么 可以去看看

waiter | 园豆:1000 (小虾三级) | 2019-01-04 11:29
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册