title: Would async/await provide benefit over Task for intertwined statements?
body: <p>I have a method (called via an AJAX request) that runs at the end of a sequence. In this method I save to the database, send emails, look up a bunch of info in other APIs/databases, correlate things together, etc.. I just refactored the original method into a second revision and used <code>Task</code>s to make it asynchronous, and shaved off up to two seconds in wall time. I used <code>Task</code>s mainly because it seemed easier (I'm not that experienced in async/await yet) and some tasks depend on other tasks (like task C D and E all depend on results from B, which itself depends on A). Basicalll all of the tasks are started at the same time (processing just zips down the to the <code>Wait()</code> call on the email task, which in one way or another requires all the others to complete. I generally do something like this except with something like eight tasks:</p>
  
  <pre><code>public thing() {
      var FooTask&lt;x&gt; = Task&lt;x&gt;.Factory.StartNew(() =&gt; {
          // ...
          return x;
      });
      var BarTask&lt;y&gt; = Task&lt;y&gt;.Factory.StartNew(() =&gt; {
        // ...
        var y = FooTask.Result;
        // ...
        return y + n;
      }
      var BazTask&lt;z&gt; = Task&lt;z&gt;.Factory.StartNew(() =&gt; {
        var y = FooTask.Result;
        return y - n;
      }
      var BagTask&lt;z&gt; = Task&lt;z&gt;.Factory.StartNew(() =&gt; {
        var g = BarTask.Result;
        var h = BazTask.Result;
        return 1;
      }
      // Lots of try/catch aggregate shenanigans.
      BagTask.Wait();
      return "yay";
  }
  </code></pre>
  
  <p>Oh I also need to roll back previous things if something breaks, like remove a database row if the email fails to send, so there are a few levels of try/catches in there. Anyway, all of this works (amazingly, it all worked on the first try). My question is whether this sort of method would benefit from being rewritten to use async/await rather than <code>Task</code>s. If so, how would the multiple-dependency scenario play out without re-running an async method that was already ran or awaited by another method? I guess some shared variable?</p>
  
  <p><strong>Update:</strong></p>
  
  <p>The <code>// ...</code> lines were supposed to indicate that the task was doing something, like looking up DB records. Sorry if that wasn't clear. About half of the tasks (there are 8 total) can take up to maybe five seconds to run, if the contexts aren't warmed up, and the other half of the tasks just collect/assemble/process/use that data.</p>