Running async methods in parallel : <p>I've got an async method, <code>GetExpensiveThing()</code>, which performs some expensive I/O work. This is how I am using it:</p>

<pre><code>// Serial execution
public async Task&lt;List&lt;Thing&gt;&gt; GetThings()
{
    var first = await GetExpensiveThing();
    var second = await GetExpensiveThing();
    return new List&lt;Thing&gt;() { first, second };
}
</code></pre>

<p>But since it's an expensive method, I want to execute these calls in in parallel. I would have thought moving the awaits would have solved this:</p>

<pre><code>// Serial execution
public async Task&lt;List&lt;Thing&gt;&gt; GetThings()
{
    var first = GetExpensiveThing();
    var second = GetExpensiveThing();
    return new List&lt;Thing&gt;() { await first, await second };
}
</code></pre>

<p>That didn't work, so I wrapped them in some tasks and this works:</p>

<pre><code>// Parallel execution
public async Task&lt;List&lt;Thing&gt;&gt; GetThings()
{
    var first = Task.Run(() =&gt;
    {
        return GetExpensiveThing();
    });

    var second = Task.Run(() =&gt;
    {
        return GetExpensiveThing();
    });

    return new List&lt;Thing&gt;() { first.Result, second.Result };
}
</code></pre>

<p>I even tried playing around with awaits and async in and around the tasks, but it got really confusing and I had no luck.</p>

<p><strong>Is there a better to run async methods in parallel, or are tasks a good approach?</strong></p>
