0

一部のデータをチェックするメソッドがあり、異なるスレッドでこのデータをチェックする方法を知りたいです。タスクと非同期/待機パターンを使用しています。

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 を一度に 1 つだけ実行するのではなく、タスクを使用して同時に多くのタスクを実行したいと考えています。時間がかからないと思います。

しかし、私はそれを行う方法がよくわかりません。私はそのようなことを試みます:

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 は 1 つだけです。

では、同時に多くのチェック メソッドを実行するにはどうすればよいでしょうか。

4

1 に答える 1

3
var sw = Stopwatch.StartNew();
var pendingTasks =
  myListOfLists
    .Select(iterator => TaskEx.Run(() => myCheckMethod(iterator))).ToArray();
Task.WaitAll(pendingTasks);
var elapsedTime = sw.Elapsed;
于 2013-10-18T10:52:52.970 に答える