[英]How to execute each iteration of the loop in one thread with task?
我有一種檢查某些數據的方法,我想知道如何在differents線程中檢查此數據。 我正在使用任務和異步/等待模式。
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;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.