c# - 如何编译这个扩展方法?

标签 c# .net generics extension-methods

我正在尝试为通用委托(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/

相关文章:

c# - picturebox 图像随机化 C#

android - 是否可以从 android 调用 WSHTTPBINDING?

.net - 如何使用aspnet_compiler处理排除的文件?

C# - 一个列表 II 中的多个泛型类型

typescript - 可以省略 Typescript 类上的泛型类型

c# - 从不同线程调用方法

C#小数取上限2

c# - 如何查询这个 XML 文件?

c# - 在 ASP.Net 中将数据更新到 SQL Server 的最佳实践是什么

java - 泛型<T extends Comparable<?的解释collection.sort/comparable 代码中的 super T>>?