我有一个类型序列IObservable<T>
和一个映射T, CancellationToken
到Task<U>
. 摆脱它们的最干净的方法是IObservable<U>
什么?
我需要以下语义:
- 每个任务在前一个项目的任务完成后开始
- 如果任务已被取消或出错,则跳过
- 原始序列的顺序被严格保留
这是我看到的签名:
public static IObservable<U> Select<T, U> (
this IObservable<T> source,
Func<T, CancellationToken, Task<U>> selector
);
我还没有写任何代码,但除非有人打败我,否则我会写。
无论如何,我不熟悉像这样的运算符Window
,所以我的解决方案可能不太优雅。
我需要 C# 4 中的解决方案,但为了比较,也欢迎 C# 5 答案。
如果您好奇,以下是我的真实场景,或多或少:
Dropbox.GetImagesRecursively ()
.ObserveOn (SynchronizationContext.Current)
.Select (DownloadImage)
.Subscribe (AddImageToFilePicker);