异步模式总是优于.NET中的同步模式?

时间:2013-07-02 00:46:53

标签: .net asynchronous

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

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

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

你怎么看?在所有情况下使用异步模式总是比使用同步模式更好(从保存资源的角度来看)甚至服务器开发?

由于

1 个答案:

答案 0 :(得分:2)

  

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

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

当方法是IO绑定时,异步方法 可以显着提高服务器的可伸缩性。

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