将回调方法作为参数传递
本文关键字:参数传递 方法 回调 | 更新日期: 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);