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

如何实现C#中多个异步数据库搜索方法的并行执行?

异步并行优化多表搜索功能

当前代码中,多个搜索方法因逐个使用await导致串行执行,无法利用异步并行提升效率。原代码如下:

public async Task<IEnumerable<SearchResponseModel>> Search(string input)
{
    var listOfSearchResponse = new List<SearchResponseModel>();
    listOfSearchResponse.AddRange(await SearchOrder(input)),
    listOfSearchResponse.AddRange(await SearchJob(input));
    listOfSearchResponse.AddRange(await SearchClient(input));
    listOfSearchResponse.AddRange(await SearchItem(input));
    listOfSearchResponse.AddRange(await SearchProduction(input));
    return listOfSearchResponse;
}

每个搜索方法定义示例:

public async Task<IEnumerable<SearchResponseModel>> SearchOrder(string input) {...}

优化方案:并行执行异步任务

要实现并行,需先启动所有异步任务,再等待全部任务完成后合并结果,修改后的代码如下:

public async Task<IEnumerable<SearchResponseModel>> Search(string input)
{
    // 先启动所有异步搜索任务,不立即等待
    var searchTasks = new List<Task<IEnumerable<SearchResponseModel>>>
    {
        SearchOrder(input),
        SearchJob(input),
        SearchClient(input),
        SearchItem(input),
        SearchProduction(input)
    };

    // 等待所有任务并行完成
    var results = await Task.WhenAll(searchTasks);

    // 合并所有结果
    var listOfSearchResponse = new List<SearchResponseModel>();
    foreach (var result in results)
    {
        listOfSearchResponse.AddRange(result);
    }

    return listOfSearchResponse;
}

关键说明

  • 原代码中每次await都会阻塞当前流程,等待前一个任务完成才会启动下一个搜索方法,因此是串行执行。
  • 修改后先将所有搜索任务加入集合,此时任务已开始并行执行,再通过Task.WhenAll等待所有任务完成,最后统一合并结果,实现真正的异步并行。

内容的提问来源于stack exchange,提问作者Bastien Vandamme

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.21 22:42:24