为什么使用APM而不是使用单独的线程?

2 .net c# multithreading asynchronous

如果我想读取或写入文件,我可以使用stream.BeginRead和stream.EndRead,但这需要回调和使用异步编程模型的大量丑陋,复杂的代码.

我为什么要使用比写在同步样式相同的代码,这些异步IO方法(使用.NET线程池在幕后),并通过线程池.(而不是用回调来削减我的方法.)

更新:

一些(好的)响应表明使用APM使我无法创建一个线程 - 我同意这一点,因为新线程每个都有自己的2MB堆栈.但'BeginRead'和'Endread'在哪里执行?线程池?重用已经分配了唯一好处的线程?

Joh*_*ers 6

首先,您还应该研究基于事件的APM.

要回答你的问题,你可能正在考虑使用一个单独的线程,并进行同步调用.另一个线程将阻止等待调用完成.

使用APM,根本没有线程阻塞.线程池没有绘制.这对于像ASP.NET这样的服务器应用程序尤其重要,因为这意味着阻塞线程不会阻止处理请求.