我正在实现一个网络库,我正在使它异步(使用beginxxx-endxxx,而不是async / await)。我还想留下一些同步方法,我计划实施这些方法,如
xxx()
{
var r=BeginXXX();
EndXXX(r);
}
我知道用async / await做类似的事情是一个坏主意,会导致死锁。
使用Begin / End这是一个好主意,还是会导致流/ kill应用程序性能出现问题?
答案 0 :(得分:1)
这种执行同步操作的方式性能较差,特别是在内存分配方面。立即阻止IAsyncResult
(通常)也需要您分配AsyncWaitHandle
,因此您还要为每个请求分配额外的内核对象。
最后,它只取决于您需要同步应用程序的性能。如果这是一个通用的,广泛使用的库(例如,System.Net.Sockets.Socket
),那么你绝对不应该采用这种方法。如果它只是一个基本的库而且您不需要支持极端场景,那么您可能可以使用这样的包装器。