Func. begininvoke的调用签名

本文关键字:调用 begininvoke TResult Func | 更新日期: 2023-09-27 18:07:00

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

MSDN的BeginInvoke页面说:

public virtual IAsyncResult BeginInvoke(
    AsyncCallback callback,
    Object object
)

不幸的是,没有关于第二个参数(对象)是什么的信息,主MSDN异步教程页面显示:

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

甚至不是一个受支持的函数定义!

看起来。net文档比我上次看的时候差了很多。

请帮忙!

Func<TResult>. begininvoke的调用签名

链接到

就在异步调用同步方法页面上

第二个形参是一个用户定义的对象,它向回调方法传递信息。

它通过IAsyncResult参数的AsyncState属性到达。

对于每个委托类型,BeginInvoke方法签名是不同的。语言运行时保证使用与委托类型相同的参数加上两个额外的参数来定义它,这些参数将在您链接到的第二页中讨论。您已经链接到没有参数的Func<T>的文档,但是示例使用具有两个参数的自定义委托类型,因此签名是不同的。

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

如果你的委托有一些参数,它们也应该传递给异步调用。所以BeginInvoke对于不同类型的委托会有不同的签名。

在教程中使用:

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

所以在调用

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

3000out int threadId使用的callDurationout threadId的值,nullnullcallbackobject的值。

在BeginInvoke对象中是要传递给回调的参数。它将作为callback参数中的属性可用。我通常传递委托本身,所以我调用EndInvoke