重载异步方法

时间:2014-03-10 11:54:48

标签: c# asynchronous task-parallel-library async-await

我在我正在处理的库中有这个场景:

我有几个异步方法可以同时处理单个项目和项目列表。列表版本看起来像这样:

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 ?
}

1 个答案:

答案 0 :(得分:3)

如果您希望基于列表的版本成为“标准”,您可以像这样实现它:

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)));
}