我得到一个编译器错误以下行的代码:Task.WhenAll与不同类型的
IEnumerable<IPurchasedItem<IFruit>>[] result = await Task.WhenAll(
repository1.LoadItems(id),
repository2.LoadItems(id)
);
错误CS0029无法隐式转换类型“无效”到
System.Collections.Generic.IEnumerable<IPurchasedItem<IFruit>>[]
我储存库方法如下所示:
public async Task<IEnumerable<IPurchasedItem<Apple>>> LoadItems(int id) {}
public async Task<IEnumerable<IPurchasedItem<Orange>>> LoadItems(int id) {}
...其中Apple
和Orange
下降来源:
public interface IPurchasedItem<out T> : where T : IFruit {}
public class Fruit : IFruit {}
public class Apple : Fruit {}
public class Orange : Fruit {}
我已经看了this question,但似乎我已经在做什么的建议,即要求IEnumerable[]
而非Task<IEnumerable>[]
。
我在做什么错了 - 如果这不是正确的做法,那么我最好的方法是等待并结合LoadItems()
方法的结果? 我本来打算做:
result[0].Concat(result[1])
有点相关:http://stackoverflow.com/questions/23766808/why-doesnt-this-exception-get-thrown –