我基于asynchronous method invocation松散地移动大量代码。它是如何实现的(最好是在生产中)?
答案 0 :(得分:4)
模式通常如下:
BeginXXX
方法,它接收所有in和ref
参数以及AsyncCallback
委托(可能为null)和状态对象引用(也可能为null)并返回IAsyncResult
。调用此方法来启动调用,它会立即或多或少地返回。EndXXX
方法,它接受IAsyncResult
操作返回的BeginXXX
加上调用时调用的任何ref
和out
个参数将被完成(在回调,等待event in the IAsyncResult
或阻止之后)。 EndXXX
将返回方法结果(如果不是void方法)或抛出异常(如果方法引发异常)。查看Stream类或任何委托,它们为您提供这些签名的示例。此外,还有一个完整的description of async calls on MSDN。
答案 1 :(得分:0)
该模式通常通过.NET的IOCompletion port实现。这允许一小段线程服务完成许多IO操作,BeginX
调用适当的Win32 API来启动异步操作,IAsyncResult的实现保持任何状态(通过{{3与基础操作相关联) ()实例),EndX
获取结果。
详细信息(和其他方法)根据相关资源的不同而有很大差异。