在 .NET 4.5 中,有许多方法现在以异步和非异步对的形式出现,例如Flush()
and FlushAsync()
。理想情况下,I/O 交互在可能的情况下始终是异步的(您始终可以使用.Wait()
如果你真的想的话),但由于向后兼容性,非异步(阻塞)版本显然需要保留。
当推出一个没有向后兼容性限制的全新库时,是否有任何理由要包含非异步方法?
异步方法通常具有与之相关的成本,因为编译器生成一个状态机,这会导致相当多的额外代码。如果您不使用async
它们不会被抖动的方法,因此您可以避免该成本。
如果您使用async
版本并简单地调用Wait()
你正冒着deadlock http://blog.stephencleary.com/2012/07/dont-block-on-async-code.html而且一旦async
操作完成。所以总体来说结果会表现得稍差一些。
此外,您获得的任何异常现在都将被包装在AggregatedException
因此异常处理也会有额外的工作。看一下异步性能:了解异步和等待的成本 http://msdn.microsoft.com/en-us/magazine/hh456402.aspx
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)