使用 Parallel.ForEach 和列表中的函数
本文关键字:函数 列表 Parallel ForEach 使用 | 更新日期: 2023-09-27 18:35:27
我想用 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());
但没有任何效果。
Parallel.ForEach
的第二个参数是一个Action<TSource>
,这意味着它必须是一个不返回任何内容但将TSource
作为参数的委托。 因此,您的案例的语法将是
Parallel.ForEach(lstmy_class, n => n.Calcul(token));