title: Why some async methods have async while other don't
body: <p>I am trying to understand when to use await/async.
  After reading few articles on the internet I have started to analyse Asp.Net Identity source code. Here is interesting fragment of RoleStore.cs</p>
  
  <p><a href="https://aspnetidentity.codeplex.com/SourceControl/latest#src/Microsoft.AspNet.Identity.EntityFramework/RoleStore.cs" rel="nofollow">https://aspnetidentity.codeplex.com/SourceControl/latest#src/Microsoft.AspNet.Identity.EntityFramework/RoleStore.cs</a></p>
  
  <pre><code>    /// &lt;summary&gt;
      ///     Find a role by name
      /// &lt;/summary&gt;
      /// &lt;param name="roleName"&gt;&lt;/param&gt;
      /// &lt;returns&gt;&lt;/returns&gt;
      public Task&lt;TRole&gt; FindByNameAsync(string roleName)
      {
          ThrowIfDisposed();
          return _roleStore.EntitySet.FirstOrDefaultAsync(u =&gt; u.Name.ToUpper() == roleName.ToUpper());
      }
  
      /// &lt;summary&gt;
      ///     Insert an entity
      /// &lt;/summary&gt;
      /// &lt;param name="role"&gt;&lt;/param&gt;
      public virtual async Task CreateAsync(TRole role)
      {
          ThrowIfDisposed();
          if (role == null)
          {
              throw new ArgumentNullException("role");
          }
          _roleStore.Create(role);
          await Context.SaveChangesAsync().WithCurrentCulture();
      }
  </code></pre>
  
  <p>My question is:
  Why <code>FindByNameAsync</code> doesn't have async keyword while <code>CreateAsync</code> has?</p>
  
  <p>We could write like this</p>
  
  <pre><code> public async Task&lt;TRole&gt; FindByNameAsync(string roleName)
       {
          ThrowIfDisposed();
          return await _roleStore.EntitySet.FirstOrDefaultAsync(u =&gt; u.Name.ToUpper() == roleName.ToUpper());
      }
  </code></pre>
  
  <p>and this would compile. I assume this is incorrect but I don't know why.</p>