我正在尝试为通用委托(delegate)创建一个扩展方法 Action<T>
能够对 Action<T>
进行简单的异步调用方法。它基本上只是实现了当您想要执行该方法而不关心它的进度时的模式:
public static class ActionExtensions
{
public static void AsyncInvoke<T>(this Action<T> action, T param) {
action.BeginInvoke(param, AsyncActionCallback, action);
}
private static void AsyncActionCallback<T>(IAsyncResult asyncResult) {
Action<T> action = (Action<T>)asyncResult.AsyncState;
action.EndInvoke(asyncResult);
}
}
问题是由于额外的 <T>
而无法编译这使得 AsyncActionCallback
通用并且具有与预期不同的签名。
签名void AsyncActionCallback(IAsyncResult)
预计。
有谁知道如何解决这个问题或完成我想做的事情?
最佳答案
public static void AsyncInvoke<T>(this Action<T> action, T param)
{
action.BeginInvoke(param, asyncResult =>
{
Action<T> a = (Action<T>)asyncResult.AsyncState;
a.EndInvoke(asyncResult);
}, action);
}
关于c# - 如何编译这个扩展方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/869903/