重载异步方法

本文关键字:异步方法 重载 | 更新日期: 2023-09-27 17:49:21

我在一个库中有这个场景:

我有两个异步方法,它们既可以用于单个项目,也可以用于项目列表。列表版本看起来像这样:

public Task<List<Result>> ReadAsync(List<ObjectId> objectIds)
{
  ...
}

推荐的方法是写ReadAsync的版本,工作在一个单独的项目?

public Task<Result> ReadAsync(ObjectId objectId)
{
   List<ObjectId> objectIds = new List<ObjectId> { objectId };
   var result = ReadAsync(objectIds); 
   return ?
}

重载异步方法

如果你想让基于列表的版本成为"标准",你可以这样实现它:

public async Task<Result> ReadAsync(ObjectId objectId)
{
  List<ObjectId> objectIds = new List<ObjectId> { objectId };
  var results = await ReadAsync(objectIds); 
  return results[0];
}

如果你可以让基于实例的版本是"标准的",并且愿意返回一个数组而不是List,那么你可以这样做:

public Task<Result[]> ReadAsync(IEnumerable<ObjectId> objectIds)
{
  return Task.WhenAll(objectIds.Select(id => ReadAsync(id)));
}