user3373870
user3373870

Reputation: 1466

Get result from Task.WhenAll

I have multiple tasks returning the same object type that I want to call using Task.WhenAll(new[]{t1,t2,t3}); and read the results.

When I try using

Task<List<string>> all = await Task.WhenAll(new Task[] { t, t2 }).ConfigureAwait(false);

I get a compiler error

Cannot implicitly convert type 'void' to 'System.Threading.Tasks.Task<System.Collections.Generic.List<string>>

both tasks are calling method similar the this.

private Task<List<string>> GetFiles(string path)
{
    files = new List<string>();
    return  Task.Run(() =>
    {
       //remove for brevity 
        return files;
    });
}

Upvotes: 22

Views: 24130

Answers (2)

Mike Hixson
Mike Hixson

Reputation: 5189

Looks like you are using the overload of WaitAll() that doesn't return a value. If you make the following changes, it should work.

List<string>[] all = await Task.WhenAll(new Task<List<string>>[] { t, t2 })
                               .ConfigureAwait(false);

Upvotes: 16

Jonas H&#248;gh
Jonas H&#248;gh

Reputation: 10874

The return type of WhenAll is a task whose result type is an array of the individual tasks' result type, in your case Task<List<string>[]>

When used in an await expression, the task will be "unwrapped" into its result type, meaning that the type of your "all" variable should be List<string>[]

Upvotes: 4

Related Questions