(OBS:英语不是我的母语,我知道这个问题的标题不太好,但我尽力让问题本身清楚)
假设我有一个IEnumerable<T> ts
包含很多项目并且每个 MoveNext() 都非常昂贵 - 假设是使用一种进行昂贵计算的方法ts
生成的。yield return
看这段代码:
var enumerator = ts.GetEnumerator();
while (true) {
T t = await TaskEx.Run<T>(() => enumerator.MoveNext() ?
enumerator.Current :
null);
if (t == null) break;
t.DoSomeLightweigthOperation();
}
它异步使用集合ts
,不会阻塞主线程(在我的例子中是一个 UI 线程)。问题是:它为ts
. 有没有一种(简单的)方法可以只使用一个线程来完成整个工作?
所以,为了让自己清楚,我想只使用一个线程生成这些项目,但我需要获取某种Task
s (或任何其他带有 a 的类GetAwaiter
)的集合,以便await
在生成这些项目中的每一个之后.