0

我正在实现一个网络库,并且正在使其异步(使用 beginxxx-endxxx,而不是 async/await)。我还想留下一些同步方法,我打算像这样实现

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

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

这是开始/结束的一个好主意,还是这会导致流/杀死应用程序的性能出现任何问题?

4

1 回答 1

1

这种执行同步操作的方式会降低性能,尤其是在内存分配方面。立即阻塞IAsyncResult也(通常)需要你分配你的AsyncWaitHandle,所以你也为每个请求分配一个额外的内核对象。

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

于 2013-09-03T12:17:32.343 回答