调用Func <tresult> .BeginInvoke的签名

时间:2015-08-07 21:13:58

标签: c# .net asynchronous

我正在尝试使用C#和.net 4.5 / 4.6编写异步操作,并尝试使用Func.BeginInvoke()

这是MSDN的BeginInvoke页面所说的内容:

public virtual IAsyncResult BeginInvoke(
    AsyncCallback callback,
    Object object
)

不幸的是,没有关于第二个参数(对象)是什么的信息,主要MSDN Async Tutorial Page显示:

// Initiate the asychronous call.
        IAsyncResult result = caller.BeginInvoke(3000, 
            out threadId, null, null);

甚至不支持函数定义!

自上次查看以来,.net文档看起来已经变得非常糟糕。

帮助将不胜感激!

3 个答案:

答案 0 :(得分:1)

AsyncCallback委托的签名相当于Action<object>BeginInvoke的第二个参数将作为回调的参数提供 - 一些要传递的状态。

如果您的委托有一些参数,那么它们也应该传递给异步调用。因此BeginInvoke将针对不同类型的委托具有不同的签名。

在教程中使用了这个:

public delegate string AsyncMethodCaller(int callDuration, out int threadId);

所以在调用中

IAsyncResult result = caller.BeginInvoke(3000, out threadId, null, null);

3000是用于callDuration的{​​{1}},out threadId的值,而out int threadIdnullnull和{ {1}}。

答案 1 :(得分:1)

它位于您链接到

的页面Calling Synchronous Methods Asynchronously
  

第二个参数是用户定义的对象,它将信息传递给回调方法。

它通过callback参数的object属性到达。

每个委托类型的BeginInvoke方法签名都不同。语言运行时保证使用与委托类型相同的参数定义它以及它在您链接到的第二页上讨论的两个附加参数。您已链接到不带参数的IAsyncResult文档,但该示例使用具有两个参数的自定义委托类型,因此签名不同。

答案 2 :(得分:0)

在BeginInvoke对象中是您传递回调的参数。它将作为回调参数中的属性提供。我通常会传递委托本身,所以我在其上调用EndInvoke。