在C#中,像System.IO.StreamReader.ReadToEndAsync()这样的异步方法是怎样实现异步I/O的功能的?如果自己写I/O设备的驱动,怎样能使用Task实现类似的异步通信功能?
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);
.net 不是开源了么 可以去看看