将回调方法作为参数传递

本文关键字:参数传递 方法 回调 | 更新日期: 2023-09-27 18:34:54

我想将回调方法作为参数传递给通用方法,但无法弄清楚如何做到这一点。 我尝试了Func<IAsyncResult>但它似乎不兼容。

public void webRequest(string apiName, string requestMethod, string requestData, Func<IAsyncResult> callback)
{
    ...
    request.BeginGetRequestStream(new AsyncCallback(GetRequestStreamCallback), request);
}

回调签名为:

void GetRequestStreamCallback(IAsyncResult asyncResult)

将回调方法作为参数传递

将参数声明为 Action<T> 而不是 Func<T>

public void webRequest(string apiName, string requestMethod, string requestData, Action<IAsyncResult> callback)

Func<IAsyncResult>需要一个不带参数并返回实例IAsyncResult函数:

Func<TResult>代表

封装没有参数的方法,并返回值 由 TResult 参数指定的类型。

Action<T> 不返回任何内容,只获取参数:

Action<T> 代表

封装具有单个参数且不返回的方法 一个值。

BeginGetRequestStream 需要一个类型为 AsyncCallback 的参数。因此,将回调参数声明为该类型。

public void webRequest(string apiName, string requestMethod, 
    string requestData,  AsyncCallback callback)
{
    ...
    request.BeginGetRequestStream(callback, request);
}

然后,您可以传递回调方法,因为它与所需的签名匹配。

webRequest(apiName, requestMethod, requestData,
    GetRequestStreamCallback);