Почему ваш исходный код не работает, проверьте другие ответы, я не буду повторять это.
Многопоточность наиболее проста, когда нет доступа на запись к общему состоянию. К счастью, ваш код может быть написан таким образом. Параллельный linq может быть полезен в таких ситуациях, но иногда накладные расходы слишком велики.
Вы можете переписать свой код на:
double sqrt_min = myArr.AsParallel().Select(x=>Math.Sqrt(x)).Min();
В вашей конкретной проблеме быстрее поменять местами операции Min
и Sqrt
, что возможно потому, что Sqrt
монотонно увеличивается.
double sqrt_min = Math.Sqrt(myArr.AsParallel().Min())