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

寻求更具可读性的.NET异步方法并行执行实现方案

可读性更强的异步并行执行方案,避免维护Task变量

我想找一种可读性更好的异步并行执行方案,不用维护Task对象再从中取结果——这种写法会拉低代码可读性。

我知道常规的并行运行两个异步方法的写法是这样的:

var t1 = RunAsync1();
var t2 = RunAsync2();

await Task.WhenAll(t1, t2);

var result1 = t1.Result;
var result2 = t2.Result;

我们的网站需要大量调用互不相关的外部服务API,我希望能提升其他开发者写的代码的可读性,避免到处都是t1、t2这类Task变量。

我自己想了个实现,但不确定是否合理:把ModelClass传入SetResultOfTask1和SetResultOfTask2这类方法里,会不会有内存泄漏之类的问题?

public async Task GetResult() 
{
   var model = new ModelClass();
   await ExecuteInParallel(SetResultOfTask1(model), SetResultOfTask2(model));

   //此时model.AsyncResult1和model.AsyncResult2应已赋值
}

private async Task ExecuteInParallel(params Task[] tasks)
{
  return Task.WhenAll(tasks);
}

private async Task SetResultOfTask1(ModelClass m) 
{
  m.AsyncResult1 = await GetAsync1();
}

private async Task SetResultOfTask2(ModelClass m)
{
  m.AsyncResult2 = await GetAsync2();
}

有没有其他可读性更强的实现方式?求建议!

更新

有人指出ExecuteInParallel方法没实际作用,可以移除来提升可读性。

我的核心需求是避免下面这种代码:

public async Task<ModelClass> GetModel()
{
   var t1 = RunAsync1();
   var t2 = RunAsync2();
   var t3 = GetProductTypesAsync();
   var t4 = GetUserInformationAsync();

   await Task.WhenAll(t1, t2, t3, t4);
   
   var model = new ModelClass();
   model.Type1 = t1.Result;
   model.Type2 = t2.Result;
   if (t3.Result == null) {
      //执行其他操作
   }

   foreach (var productType in t4.Result) {  
     //获取每个产品类型的更多信息
     model.ProductTypes.Add(productType);
   }

   return model;
}

转而用更具表达性的代码,让其他开发者能一眼看懂Model的构建逻辑:

public async Task<ModelClass> GetModel()
{
   var model = new ModelClass();
   
   //这四个方法彼此独立,仅需将结果存入ModelClass实例,因此我希望并行执行它们

   await GetGeneralInformationAboutTheProduct(model);
   await LoadProductTypes(model);
   await LoadUserInformation(model);
   await LoadShoppingCartInformation(model);

   return model;
}

内容的提问来源于stack exchange,提问作者Steven Lemmens

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 23:05:24