0

Я хотел бы сделать это с помощью 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

Второй параметр Parallel.ForEach - это Action<TSource>, что означает, что он должен быть делегатом, который ничего не возвращает, но принимает значение TSource в качестве параметра. Поэтому синтаксис для вашего дела будет

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

он отлично работает. Спасибо. – Florent

+1

@Florent Добро пожаловать! Если это решит вашу проблему, вы можете [принять мой ответ] (http://stackoverflow.com/help/someone-answers). –

Смежные вопросы