С помощью 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;
}