2

次の関数を並列化しようとしていますが、方法がわかりません。

public static Cell GetClosestCell (Cell cell)
{
    // The four calls below should be run in parallel.
    Cell temp1 = new FindNorth(cell);
    Cell temp2 = new FindSouth(cell);
    Cell temp3 = new FindWest(cell);
    Cell temp4 = new FindEast(cell);

    // Return smallest cell based on [X].
    if ((temp1.X < temp2.X) && (temp1.X < temp3.X) && (temp1.X < temp4.X))
    {
        return (temp1);
    }
    else if ((temp2.X < temp3.X) && (temp2.X < temp4.X))
    {
        return (temp2);
    }
    else if (temp3.X < temp4.X)
    {
        return (temp3);
    }
    else
    {
        return (temp4);
    }
}

4 つの関数呼び出しはそれぞれ並列に実行する必要がありますが、スレッドを開始する必要はありません。つまり、各呼び出しをディスパッチできる入力を待機している 4 つのスレッドが既に実行されている必要があります。

私は並列ループの通常のパラダイムに慣れており、これにアプローチする方法がわかりません (少なくともクリーンな方法ではありません)。

4

1 に答える 1

2
using System;
using System.Threading.Tasks;

public class Program {
    public static void Main() {

        Task<Cell> task1 = new Task<Cell>(n => FindNorth((Cell)n), cell);

        Task<Cell> task2 = new Task<Cell>(n => FindSouth((Cell)n), cell);
        Task<Cell> task3 = new Task<Cell>(n => FindSouth((Cell)n), cell);
        Task<Cell> task4 = new Task<Cell>(n => FindEast((Cell)n), cell);



        task1.Start();
        task2.Start();
        task3.Start();
        task4.Start();
        Console.WriteLine("Main method complete. Press <enter> to finish.");
        Console.ReadLine();
    }

}
于 2012-08-26T10:04:15.343 に答える