我得到一個編譯器錯誤以下行的代碼: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 –