面试题答案
一键面试using System;
using System.Threading.Tasks;
public class ParallelSumOfSquares
{
public static long CalculateSumOfSquares(int[] numbers)
{
long sum = 0;
try
{
Parallel.ForEach(numbers, number =>
{
checked
{
long squared = (long)number * number;
Interlocked.Add(ref sum, squared);
}
});
}
catch (OverflowException)
{
Console.WriteLine("发生溢出异常");
}
catch (Exception ex)
{
Console.WriteLine($"发生其他异常: {ex.Message}");
}
return sum;
}
}
你可以使用以下方式调用这个方法:
class Program
{
static void Main()
{
int[] numbers = { 1, 2, 3, 4, 5 };
long result = ParallelSumOfSquares.CalculateSumOfSquares(numbers);
Console.WriteLine($"平方和为: {result}");
}
}
解释:
- 使用
Parallel.ForEach
:通过Parallel.ForEach
对数组中的每个元素并行执行操作,提高计算效率。 - 异常处理:使用
try-catch
块捕获可能出现的异常,这里主要考虑了OverflowException
(计算平方时可能溢出)以及其他一般性异常。 - 线程安全累加:使用
Interlocked.Add
来确保在并行环境下累加操作的线程安全性。