线程编程 - 与异步编程有关系?对网络应用有用吗?

Maj*_*ons 1 c# multithreading asynchronous

除了AJAX之外,我对异步编程知之甚少,当然除了它们背后的基本思想之外没什么关于线程的.所以,不用说,当我在MSDN博客中看到Visual Studio/C#的最新版本将异步融入语言本身时,我感到有点困惑.

那么,作为整个C#/ MVC世界的初学者,我应该开始学习线程吗?它们对我有用吗?线程和异步编程是否相似?

Eri*_*ert 11

你应该学习的第一件事是异步和线程是两回事.线程是关于并发性的,而不是关于异步的.更具体地说:并发是一种管理异步的策略.

我们需要管理异步,因为计算机程序越来越多地操纵高延迟数据源.也就是说,当您需要获取信息和信息何时可用于处理器之间的差距足够大,以至于处理器应该在那个时间做其他事情.延迟的来源可能是任何东西 - 可能是另一个线程正在进行工作而当前线程正在等待.可能是这个群集中的另一台计算机正在进行工作,或者可能是您正在等待磁盘旋转或数据通过网络到达,或者其他什么.如今,延迟无处不在.

解决这个问题的典型方法是同步等待信息变得可用; 就是阻止.如果您不想让处理器等待信息,该怎么办?您需要异步等待.也就是说,在等待的时候做点别的事.

线程是一个解决方案,但它们不是一个很好的解决方案.在UI线程上阻塞或做很多工作都不是一个好主意,并且通常处理线程使得你必须在全局范围内推理你的程序以避免死锁.另一个解决方案是将工作分解成小块; 只要一件作品必须等待,你就可以将其继续排队,继续做其他事情,然后再回到它,所有这些都在同一个线程上.将在下一版本的C#中完成的异步工作使用各种技术的组合来实现对异步的更好支持,而不会阻止UI.

如果这个主题让你感兴趣,我在2011年10月的MSDN杂志上有一篇关于初学者的文章,你可以在这里阅读.我的同事Mads和Stephen也有更深入的文章.