使用BeginXXX和EndXXX实现同步方法是个好主意吗?

时间:2013-09-03 10:05:09

标签: c# asynchronous synchronous

我正在实现一个网络库,我正在使它异步(使用beginxxx-endxxx,而不是async / await)。我还想留下一些同步方法,我计划实施这些方法,如

xxx()
{
    var r=BeginXXX();
    EndXXX(r);
}

我知道用async / await做类似的事情是一个坏主意,会导致死锁。

使用Begin / End这是一个好主意,还是会导致流/ kill应用程序性能出现问题?

1 个答案:

答案 0 :(得分:1)

这种执行同步操作的方式性能较差,特别是在内存分配方面。立即阻止IAsyncResult(通常)也需要您分配AsyncWaitHandle,因此您还要为每个请求分配额外的内核对象。

最后,它只取决于您需要同步应用程序的性能。如果这是一个通用的,广泛使用的库(例如,System.Net.Sockets.Socket),那么你绝对不应该采用这种方法。如果它只是一个基本的库而且您不需要支持极端场景,那么您可能可以使用这样的包装器。