(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. 有没有一种(简单的)方法可以只使用一个线程来完成整个工作?
所以,为了让自己清楚,我想只使用一个线程生成这些项目,但我需要获取某种Tasks (或任何其他带有 a 的类GetAwaiter)的集合,以便await在生成这些项目中的每一个之后.