0

.NET 提供了一种异步模式 - IAsyncResult、BeginMethod()、EndMethod()。我只是想知道使用这种模式总是比使用相应的同步模式更好——只需调用 Method()。

在处理 UI 的情况下,使用异步模式肯定会胜过同步模式,因为在 Method() 中的作业正在完成时,其他任务可以在当前线程中处理。

但是如果我们正在开发一个服务器呢?假设 Method() 进行 DB 调用,而当前处理 Method() 的线程在从 DB 调用获得结果之前没有任何事情要做。在这种情况下,我认为使用同步模式会比异步模式更好,因为我们可以节省异步模式所需的一些开销。

你怎么看?使用异步模式总是比使用同步模式更好(从节省资源的角度来看),即使在所有情况下都用于服务器开发?

谢谢

4

1 回答 1

2

但是如果我们正在开发一个服务器呢?假设 Method() 进行 DB 调用,而当前处理 Method() 的线程在从 DB 调用获得结果之前没有任何事情要做。在这种情况下,我认为使用同步模式会比异步模式更好,因为我们可以节省异步模式所需的一些开销。

如果异步方法调用是异步的,因为它正在等待 IO,那么在服务器上使用异步方法是一个很大的胜利。服务器可以释放并重用当前等待异步方法调用完成的线程,该线程使用信号进行通知。

当方法受 IO 限制时,异步方法可以显着提高服务器的可伸缩性。

话虽如此,我会避开IAsyncResultAPM,而是使用基于任务的异步模式(单个方法返回Task<T>)与 C# 5 语言提供的新的可组合性功能(async/await关键字)相结合。这些在异步实现服务器端方法时特别好,因为可以使用与同步方法几乎相同的控制流来创建返回Task<T>with的方法。await

于 2013-07-02T00:49:55.407 回答