将Parallel.ForEach与list中的函数一起使用

时间:2016-02-20 17:28:32

标签: c# multithreading task-parallel-library parallel.foreach

我想用Parallel.ForEach做到这一点。我怎么办?

partial class Form1: Form
{
private List<my_class> lstmy_class = new List<my_class>();  

private void execute_tpl(object source, ElapsedEventArgs e)
    {
        var tokenSource = new CancellationTokenSource();
        var token = tokenSource.Token;
        var tab_task = new Task[lstmy_class.Count];
        try
            {
                for (int i = 0; i < lstmy_class.Count; i++)
                {
                   tab_task[i] = Task.Factory.StartNew(() => lstmy_class[i].Calcul(token));
                }

                Task.WaitAll(tab_task);
            }
            catch (Exception ex)
            {
                Console.WriteLine("Error : "+ex.GetType());
            }
    }
}

class my_class{ 
... 
    public void Calcul(CancellationToken token)
    {
       // do work       
    }   
}

我尝试:

Parallel.ForEach<my_class>(lstChartClass, () => Calcul(token));

但编译器不想要这种语法。我找不到好的语法。

我也尝试使用Parallel.ForEach<my_class>(lstChartClass, (i) => lstChartClass[i]Calcul());,但没有任何作用。

1 个答案:

答案 0 :(得分:1)

Parallel.ForEach的第二个参数是Action<TSource>,这意味着它必须是一个只返回TSource作为参数的委托。因此,您的案例的语法将是

Parallel.ForEach(lstmy_class, n => n.Calcul(token));