c# - Task.WhenAll With Different Types -


i getting compiler error following line of code:

ienumerable<ipurchaseditem<ifruit>>[] result = await task.whenall(                 repository1.loaditems(id),                 repository2.loaditems(id)                 ); 

error cs0029 cannot implicitly convert type 'void' system.collections.generic.ienumerable<ipurchaseditem<ifruit>>[]

my repository methods like:

public async task<ienumerable<ipurchaseditem<apple>>> loaditems(int id) {} public async task<ienumerable<ipurchaseditem<orange>>> loaditems(int id) {} 

...where apple , orange descend from:

public interface ipurchaseditem<out t> : t : ifruit {} public class fruit : ifruit {} public class apple : fruit {} public class orange : fruit {} 

i've looked @ this question, seems i'm doing what's suggested, i.e. asking ienumerable[] rather task<ienumerable>[].

what doing wrong - , if isn't right approach best way me await , combine results of both loaditems() methods? planning on doing:

result[0].concat(result[1]) 

task<t> class, , therefore invariant. task<string> not task<object> - , more complicated example, task<ienumerable<ipurchaseditem<apple>>> not task<ienumerable<ipurchaseditem<fruit>>> want be.

you write method convert 1 another, of course - like:

public static task<ttarget> convert<tsource, ttarget>(task<tsource> task)     tsource : ttarget {     return await task; } 

then convert specific tasks task<ienumerable<ipurchaseditem<fruit>>> tasks instead, , then task.whenall want.