[英]How to use Task.WhenAll() for multiple Lists of different return types?
[英]Task.WhenAll With Different Types
我收到以下代碼行的編譯器錯誤:
IEnumerable<IPurchasedItem<IFruit>>[] result = await Task.WhenAll(
repository1.LoadItems(id),
repository2.LoadItems(id)
);
錯誤CS0029無法將類型'void'隱式轉換為
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 {}
我已經看了這個問題 ,但似乎我已經在做建議的事情,即要求IEnumerable[]
而不是Task<IEnumerable>[]
。
我在做什么錯-如果這不是正確的方法,那么等待和合並兩個LoadItems()
方法的結果的LoadItems()
方法是什么? 我原本打算這樣做:
result[0].Concat(result[1])
Task<T>
是一個類,因此是不變的。 因此Task<string>
不是Task<object>
-作為更復雜的示例, Task<IEnumerable<IPurchasedItem<Apple>>>
不是Task<IEnumerable<IPurchasedItem<Fruit>>>
就是這樣。
當然,您可以編寫一種從一種轉換為另一種的方法-類似於:
public static Task<TTarget> Convert<TSource, TTarget>(Task<TSource> task)
where TSource : TTarget
{
return await task;
}
然后,您可以將所有特定任務轉換為Task<IEnumerable<IPurchasedItem<Fruit>>>
任務, 然后 Task.WhenAll
將執行您想要的操作。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.