title: Async methods with or without ConfigureAwait on NetStandard lib for Net Core
body: <p>I have a library that is doing bulk insert.<br>
  Library is EfCore extension made in .NetStandard(1.4) so it can be used in ASP.NET Core projects targeting both .NetCore(1.0+) or full NetFramework(4.6.1+)<br>
  One of the functions is:</p>
  
  <pre><code>public static BulkInsert&lt;T&gt;(this DbContext context, IList&lt;T&gt; entities)
  {
      SqlBulkOperation.InsertAsync&lt;T&gt;(context, entities);
  }
  
  internal static class SqlBulkOperation
  {
      public static void Insert&lt;T&gt;(DbContext context, IList&lt;T&gt; entities)
      {
          ....
          sqlBulkCopy.WriteToServer(reader);
          ....
      }
  }
  </code></pre>
  
  <p>Next I have added the same method with <strong>async</strong> support</p>
  
  <pre><code>public static async Task BulkInsertAsync&lt;T&gt;(this DbContext context, IList&lt;T&gt; entities)
  {
      await SqlBulkOperation.InsertAsync&lt;T&gt;(context, entities, null, null);
  }
  
  internal static class SqlBulkOperation
  {
      public static async Task InsertAsync&lt;T&gt;(DbContext context, IList&lt;T&gt; entities)
      {
          ....
          await sqlBulkCopy.WriteToServer(reader);
          ....
      }
  }
  </code></pre>
  
  <p>And now I was advised to change the async method in a way to add <em>ConfigureAwait(false)</em> to internal method and also to optimize out simple <em>async</em> by removing explicit <em>async</em> keyword from exposed method like this:</p>
  
  <pre><code>public static Task BulkInsertAsync&lt;T&gt;(this DbContext context, IList&lt;T&gt; entities)
  {
      return SqlBulkOperation.InsertAsync&lt;T&gt;(context, entities, null, null, true);
  }
  
  internal static class SqlBulkOperation
  {
      public static async Task InsertAsync&lt;T&gt;(DbContext context, IList&lt;T&gt; entities)
      {
          await sqlBulkCopy.WriteToServerAsync(reader).ConfigureAwait(false);
      }
  }
  </code></pre>
  
  <p>So the question being:<br>
  In this situation is it better to use <em>ConfigureAwait(false)</em>?<br>
  And secondly is removing <em>async</em> keyword from exposed methods for scenario in example advisable?</p>
  
  <p>PS I have already read few blogs and several questions here regarding these issue but still haven't come to conclusive answer.
  I read that ASP.NET Core no longer has a "context" so taking that into the consideration what would be the best practice here?</p>