MST

星途 面试题库

面试题:C#中TPL如何实现并行计算数组元素平方和

请使用C#的任务并行库(TPL)编写一个方法,实现对给定整数数组中每个元素求平方后再求和的功能。要求展示如何正确使用Parallel类或Task类来实现并行计算,并处理可能出现的异常。
18.7万 热度难度
编程语言C#

知识考点

AI 面试

面试题答案

一键面试
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}");
    }
}

解释:

  1. 使用Parallel.ForEach:通过Parallel.ForEach对数组中的每个元素并行执行操作,提高计算效率。
  2. 异常处理:使用try-catch块捕获可能出现的异常,这里主要考虑了OverflowException(计算平方时可能溢出)以及其他一般性异常。
  3. 线程安全累加:使用Interlocked.Add来确保在并行环境下累加操作的线程安全性。