我有种子的收藏

var seeds = new [] {1, 2, 3, 4};


我想从每个种子运行一个异步方法,该方法对种子进行一些计算:

async Task<int> Calculation(int seed);


我的目标是执行这样的选择:

var results = from seed in seeds
              let calculation = await Calculation(seed)
              select new { seed, calculation };


不幸的是,使用LINQ不允许使用此语法。

如何使“结果”变量包含种子和计算?

(我会很感激任何答案,但特别是如果它使用System.Reactive的Observable

最佳答案

这是一个Rx解决方案:

var seeds = new [] {1, 2, 3, 4};
var results = Observable.ToObservable(seeds)
    .SelectMany(async i => new { seed = i, calculation = await Calculation(i)})
    .ToEnumerable();

10-06 03:00