我在这里对多线程感到非常困惑:(我正在阅读关于C#Async/Await关键字.我经常读到,通过使用这个异步功能,代码被执行"非阻塞".人们将代码示例分为两类" IO-Bound"和"CPU绑定" - 我执行io-bound时我不应该使用线程,因为该线程只会等待..
我不明白......如果我不想让用户等待操作,我必须在另一个线程上执行该操作,对吧?
如果我使用Threadpool,一个"Thread"-class,delegate.BeginInvoke或TPL的实例 - 每个异步执行都在另一个线程上完成.(有或没有回调)
您缺少的是并非每个异步操作都在另一个线程上完成.等待IO操作或Web服务调用不需要创建线程.在Windows上,这是通过使用OS I/O完成端口完成的.
当您调用类似Stream.ReadAsync的操作系统将向磁盘发出读取命令然后返回调用方时会发生什么.磁盘完成读取后,会通知操作系统内核,然后操作系统将触发回调进程.所以没有必要创建一个新的线程池线程,它只会坐下来阻塞.