title: Task.FromResult() vs. Task.Run()
body: <p>I've come across quite a few situations lately where <code>async</code> methods execute synchronously, but return a Task anyway, so they can be awaited, e.g.</p>
  
  <pre><code>public virtual Task CreateAsync(TUser user)
  {
      ThrowIfDisposed();
      if (user == null) throw new ArgumentNullException("user");
      Context.Save(user);
      Context.Flush();
      return Task.FromResult(0);
  }
  </code></pre>
  
  <p>Surely it is better to dispatch the probably-long-running operation to a thread and return the still active task, to genuinely be awaited:</p>
  
  <pre><code>public virtual Task CreateAsync(TUser user)
  {
      ThrowIfDisposed();
      if (user == null) throw new ArgumentNullException("user");
      return Task.Run(() =&gt;
      {
          Context.Save(user);
          Context.Flush();
      });
  }
  </code></pre>
  
  <p>I some suspicion, though, that just spinning off TPL threads isn't the safest practice. Any commentary on these two different patterns?</p>