2013-06-26 19 views
1

如果我上不需要响应一个线程,不适宜继续执行依赖于I/O密集型调用的结果(HttpClient的请求) ,在.NET中异步实现调用有什么价值吗?调度O绑定操作在.NET

将在Windows知道我在等待一个I/O操作和数据,直到到达调度线程不要?

我记得读书的地方,这样做,但我恐怕还是很难理解它是如何工作,当我可以依靠它。

+0

注:我想可能的不利可能是东西就像检查汇总例外,任务的开销等 – Sprague

+0

我选择一个答案,但我仍想知道是否有人能简要介绍一下如何OS和CLI一起工作,以避免调度等待I/O的线程,并且会提出一个评论,可以肯定地确认它的细节。 – Sprague

回答

2

不,在那里使用异步没有价值。正如你怀疑的那样,Windows会知道线程正在等待IO,并且不会调度线程直到数据到达。

但是,异步的想法是,你并不需要创建一个新的线程。异步的想法是(我在这里削减了几个角落;互联网上有更好的文档),它试图做一些像你在这里手动做的事情。所以,而不是你必须创建一个新的线程,异步为你做这个。 (实际上它并不创建一个新的线程,但你的想法。)

如果这需要很高的性能,我不会建议这样做你现在正在实施的方式。异步会更好。在你的情况下,当你做1000个请求时,你将有1000个线程,这不是一个好主意。异步会更聪明地实现这一点,并会给你更好的表现。

使用异步(除了性能)的基本优点是,它就像你实际上在UI线程编程只。以前,这将会锁定您的应用程序,但通过异步,您的应用程序可以保持响应。这是异步的主要优势。

+0

在这种情况下,我不是手动清理线程,它来自IIS或我们在IIS之上使用的框架。所以我认为这不会成为问题。 – Sprague

+0

比你可能没事。此外,异步可能不会工作(至少不是您期望的),因为它对Windows/WPF/Metro应用程序意味着更多。 –