如何在一个线程中使用任务执行循环的每次迭代
本文关键字:执行 任务 循环 迭代 线程 一个 | 更新日期: 2023-09-27 18:35:51
我有一个检查一些数据的方法,我想知道如何在不同的线程中检查这些数据。我正在使用任务和异步/等待模式。
private bool my myCheckMethod(List<long> paramData)
{
//code that check the information in the list
}
private void mainMethod()
{
//1.- get data from the data base
//2.- i group the data from the database in many lists.
foreach(list<List<long>> iterator in myListOfLists)
{
myCheckMethod(itrator);
}
}
但我希望 myCheckMethod 不是一次只执行一个,而是使用任务同时执行多个。我认为这将花费更少的时间。
但是,我不太知道如何做到这一点。我尝试这样的事情:
private void mainMethod()
{
//1.- get data from the data base
//2.- i group the data from the database in many lists.
string initTime = System.DateTime.String();
foreach(list<List<long>> iterator in myListOfLists)
{
myCheckMethod(itrator);
}
string endTime = System.DateTime.String();
}
我想在开始检查和检查所有列表时获得信息。
我尝试这样的事情:
private void mainMethod()
{
//1.- get data from the data base
//2.- i group the data from the database in many lists.
string startTime = System.DateTime.String();
foreach(list<List<long>> iterator in myListOfLists)
{
TaskEx.Run(() =>
{
myCheckMethod(itrator);
});
}
string endTime = System.DateTime.String();
}
但在这种情况下,开始时间和结束时间是相同的,因为我不等待任务。所以我尝试了另一种选择:
private void mainMethod()
{
//1.- get data from the data base
//2.- i group the data from the database in many lists.
string startTime = System.DateTime.String();
foreach(list<List<long>> iterator in myListOfLists)
{
TaskEx.Run(() =>
{
myCheckMethod(itrator);
}).wait();
}
string endTime = System.DateTime.String();
}
但是在这种情况下,只同时执行一个myCheckMethod,因为我想要完成一个以继续下一次迭代。
那么如何同时执行多个检查方法呢?
var sw = Stopwatch.StartNew();
var pendingTasks =
myListOfLists
.Select(iterator => TaskEx.Run(() => myCheckMethod(iterator))).ToArray();
Task.WaitAll(pendingTasks);
var elapsedTime = sw.Elapsed;