我在我正在处理的库中有这个场景:
我有几个异步方法可以同时处理单个项目和项目列表。列表版本看起来像这样:
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 ?
}
答案 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)));
}