簡體   English   中英

如何使用任務在一個線程中執行循環的每個迭代?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM