You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C#中Parallel.Invoke返回值及多Sheet Excel生成并行实现咨询

使用C# Parallel.Invoke并行执行数据获取方法并处理返回值

没问题,我来帮你把串行代码改成并行执行,同时处理好每个方法的返回值!

核心思路

Parallel.Invoke的作用就是让多个独立操作并行执行,它会自动等待所有操作完成后再继续后续逻辑。你的四个方法都是独立从数据库拉取数据,且结果要赋值到同一个CAMSFormat对象的不同属性里——每个委托只负责一个属性的赋值,不存在多线程竞争同一资源的问题,直接这么做非常安全。

改造后的代码示例

// 先初始化CAMS对象
CAMSFormat CAMS = new CAMSFormat();

try
{
    // 并行执行四个数据获取方法,直接把返回值赋值给对应属性
    Parallel.Invoke(
        () => CAMS.CAMSTrailPSI = bl.CAMSTrailPSIoutput(FromDate, ToDate, MemoType),
        () => CAMS.CAMSUpfrontPSI = bl.CAMSUpfrontPSIoutput(FromDate, ToDate, MemoType),
        () => CAMS.CAMSTrailSIPSTP = bl.CAMSTrailSIPSTPoutput(FromDate, ToDate, MemoType),
        () => CAMS.CAMSUpfrontSIPSTP = bl.CAMSUpfrontSIPSTPoutput(FromDate, ToDate, MemoType)
    );
}
catch (AggregateException ex)
{
    // 处理并行执行中可能出现的异常
    foreach (var innerException in ex.InnerExceptions)
    {
        // 替换成你的日志记录或错误提示逻辑
        Console.WriteLine($"数据获取失败: {innerException.Message}");
    }
    // 根据业务需求决定是否终止后续Excel写入操作
    return;
}

// 所有数据获取完成后,统一写入Excel的不同工作表
// 示例(根据你实际的Excel操作逻辑调整):
WriteToExcelSheet(CAMS.CAMSTrailPSI, "TrailPSI");
WriteToExcelSheet(CAMS.CAMSUpfrontPSI, "UpfrontPSI");
WriteToExcelSheet(CAMS.CAMSTrailSIPSTP, "TrailSIPSTP");
WriteToExcelSheet(CAMS.CAMSUpfrontSIPSTP, "UpfrontSIPSTP");

关键注意事项

  • 线程安全检查:确保你的bl业务逻辑对象里的四个xxxoutput方法是线程安全的。比如,如果方法内部使用了共享的数据库连接或非线程安全资源,可能会引发问题。建议每个方法内部独立创建数据库连接,避免共享状态。
  • 异常处理:只要有一个并行方法抛出异常,Parallel.Invoke会把所有异常打包成AggregateException抛出,一定要用try-catch捕获,遍历InnerExceptions处理每个方法的具体异常。
  • Excel写入规范:Excel操作(比如EPPlus、NPOI等库)通常不是线程安全的,必须等所有并行数据获取完成后,在主线程串行写入各个工作表,避免数据错乱或文件损坏。
  • 性能权衡:并行执行能减少总耗时,但要考虑数据库负载——四个查询同时运行可能给数据库带来压力,如果数据库性能有限,可以用ParallelOptions限制最大并发数,比如:
    var options = new ParallelOptions { MaxDegreeOfParallelism = 2 };
    Parallel.Invoke(options, /* 委托列表 */);
    

内容的提问来源于stack exchange,提问作者Sini A

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 11:56:54