通用lambda方法签名

时间:2011-09-04 02:13:52

标签: c# .net generics lambda

我确信这是非常标准的东西,但我似乎无法绕过这个。

我正在编写一个简单的帮助器类,用于在单独的线程中执行代码。我一般都非常熟悉如何做到这一点,但不使用lambdas。我想这是关于一般lambda用法,而不是线程。

我想要写的是这样的:

ThreadedMethods.Parameterized<int>((i) => { for (;i < 10; i++;) DoSomething();});

ThreadedMethods.Parameterized<IEnumberable<Something>>((list) => 
{
    foreach (var s in list)
    {
         s.SomeHeavyProcessing();
    }
});

这可能吗?此外,有没有理由首先尝试实现这一点,因为lambda可以访问方法调用范围内的所有内容?

1 个答案:

答案 0 :(得分:2)

当然,这是可能的。你应该有

的实现
class ThreadedMethods {
    public static void Parameterized<T>(Action<T> action) {
        // Start the action on a different thread using possibly ThreadPool.QueueUserWorkItem
    }
}

然后,如您在问题中显示的示例所示,请调用您的实施。

编辑:有关如何在有行动时调用ThreadPool.QueueUserWorkItem方法的更多信息

    public void StartOnDifferentThread<T>(Action<T> action, T input)
    {
        ThreadPool.QueueUserWorkItem(o => action((T)o), input);
    }