2013-01-31 39 views
0

如果我有一个web应用程序,它将呼叫打包到Task<T>中的网络和数据库并等待它们,这应该可以防止线程被阻塞,因此可以重新使用它。使用c#5 async for non-blocking

但是,当IO工作被执行时,是否还有一些线程被阻塞,所以没有真正的好处来等待?

回答

2

如果您只是在Task.Run中封锁呼叫,那么您是正确的:没有任何好处。但是,如果您使用自然异步方法(例如,异步方法HttpClient/WebClient/HttpWebRequest方法和异步数据库方法),那么这些请求将不使用线程,并且您将获得可伸缩性优势。

在Windows的设备驱动程序级别,所有I/O都是异步的。同步API只是便利包装。自然异步方法不会阻塞同步API上的线程;它们建立在异步API上。

+0

很酷。你知道我在哪里可以了解更多这方面的信息吗? – Nick

+0

这些信息遍布MSDN和各种SDK,但一些好的资源是Windows Internals和CLR通过C#。 –