我有一个返回类型为:
public async Task<IEnumerable<T>> GetAll()
它会进行进一步的异步调用(数量未知),每个调用都返回一个可枚举的T类型任务,然后希望将结果合并以返回。
var data1 = src1.GetAll();
var data2 = src2.GetAll();
var data3 = src3.GetAll(); //and so on
现在很容易等待所有结果并连接它们以生成单个可枚举对象,但我希望在第一次调用返回时就能够使用可枚举对象,如果有任何调用仍在等待可用结果,则需要为调用者/枚举器提供潜在的等待。
我是否必须手动编写连接操作,以解决在任务<>中包装时缺乏枚举器支持的问题?或者TPL或其他地方已经有库调用可以帮助我。我确实看过IX,但它仍处于实验版本,并不想将其合并进来。
另外,我正在尝试的是反模式吗?我可以想到一个复杂性,即异常处理 - 从调用者的角度来看,调用可能成功完成并开始使用可枚举对象,但在其中间可能会出现错误...
IObservable<T>
接口?这种情况下,你可以尝试使用Observable.Concat
方法。 - Vlad