С помощью Task расспараллелить операции над матрицей C#

Подскажите, пожалуйста, как с помощью класса Task реализовать параллельный алгоритм умножения матрицы на вектор? То есть результат умножения строки на вектор никак не зависит от умножения предыдущих строк, поэтому, я полагаю, целесообразно распределить задачи по строкам, но сам алгоритм мне не ясен до конца. Есть какие-нибудь идеи по этому поводу?

        public static int[] matxvecTask(int[,] mat, int[] vec) //функция умножения матрицы на вектор Task
    {
        Task[] tasks = new Task[4]
        {
            new Task(() => Console.WriteLine("1")),
            new Task(() => Console.WriteLine("2")),
            new Task(() => Console.WriteLine("3")),
            new Task(() => Console.WriteLine("4"))
        };
        foreach(var t in tasks)
        {
            t.Start();
        }
        Task.WaitAll(tasks);
         int[] res = new int[mat.GetLength(0)] ;

             for (int i = 0; i < mat.GetLength(0); i++)
             {
                 for (int j = 0; j < mat.GetLength(1); j++)
                 {
                     res[i] += mat[i, j] * vec[j];
                 }
             }

         return res;
    }

Ответы (0 шт):