重载异步方法
本文关键字:异步方法 重载 | 更新日期: 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)));
}