我确信这是非常标准的东西,但我似乎无法绕过这个。
我正在编写一个简单的帮助器类,用于在单独的线程中执行代码。我一般都非常熟悉如何做到这一点,但不使用lambdas。我想这是关于一般lambda用法,而不是线程。
我想要写的是这样的:
ThreadedMethods.Parameterized<int>((i) => { for (;i < 10; i++;) DoSomething();});
和
ThreadedMethods.Parameterized<IEnumberable<Something>>((list) =>
{
foreach (var s in list)
{
s.SomeHeavyProcessing();
}
});
这可能吗?此外,有没有理由首先尝试实现这一点,因为lambda可以访问方法调用范围内的所有内容?
答案 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);
}