c#中的异步方法调用模式如何工作和实现?

时间:2009-05-05 18:58:13

标签: c# .net design-patterns

我基于asynchronous method invocation松散地移动大量代码。它是如何实现的(最好是在生产中)?

  • 它是如何运作的?
  • 如何使用?
  • 如何实施?

2 个答案:

答案 0 :(得分:4)

模式通常如下:

  • 您有一个BeginXXX方法,它接收所有in和ref参数以及AsyncCallback委托(可能为null)和状态对象引用(也可能为null)并返回IAsyncResult。调用此方法来启动调用,它会立即或多或少地返回。
  • 然后你有一个EndXXX方法,它接受IAsyncResult操作返回的BeginXXX加上调用时调用的任何refout个参数将被完成(在回调,等待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获取结果。

详细信息(和其他方法)根据相关资源的不同而有很大差异。