通用lambda方法签名

本文关键字:方法 lambda 通用 | 更新日期: 2023-09-27 18:07:33

我相信这是非常标准的东西,但我似乎无法理解这一点。

我正在编写一个简单的helper类,用于在单独的线程中执行代码。我很熟悉如何做这个,但不使用lambda。我猜这是关于一般的lambda使用,而不是线程。

我想写的是这样的:

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

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

这可能吗?而且,既然lambda将访问方法调用范围内的所有内容,那么是否有任何理由首先尝试实现这一点呢?

通用lambda方法签名

当然有可能。你应该有

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

然后你调用你的实现,正如你在你的问题中所展示的例子。

编辑:关于如何调用ThreadPool的更多信息。当您有Action

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