我正在尝试将现有的APM调用(
这似乎还好,但是我读了另一篇关于在任务中包装APM调用的文章。他还提到
如果它正在进行轮询,那么意味着回调可能不会立即到来,他们必须在整个调用期间忙碌地检查它。如果他们拥有一个
有人知道他们在做什么以及这种性能损失有多严重吗?
BeginX
,EndX
)包装在Tasks
中,以获得所有良好的优势。不幸的是,我们的方法是非常规的,并使用out
参数,因此无法使用标准的FromAsync
方法,其中您提供开始和结束委托并让它很好地包装。
这篇文章描述了另一种选择:一个重载,它接受一个IAsyncResult
并且只需要你实现结束回调函数。他们获取IAsyncResult
句柄,然后等待它完成,然后调用您传递的委托。这似乎还好,但是我读了另一篇关于在任务中包装APM调用的文章。他还提到
IAsyncResult
重载不如其他方法高效。在我看来,这意味着回调函数没有被用来报告方法的完成。这意味着他们必须使用AsyncWaitHandle
或轮询IsCompleted
。他们使用哪一个?会有多大的性能损失?如果它正在进行轮询,那么意味着回调可能不会立即到来,他们必须在整个调用期间忙碌地检查它。如果他们拥有一个
AsyncWaitHandle
,则有另一个线程坐在那里等待结果,这完全违背了我使用异步方法的初衷。有人知道他们在做什么以及这种性能损失有多严重吗?