title: What to do when interface implementation does not provide async
body: <p>Let's say I have an interface:</p>
  
  <pre><code>interface ILoader()
  {
      Task&lt;Data&gt; LoadAsync(int id);
  }
  </code></pre>
  
  <p>I have two implementations of this interface:</p>
  
  <pre><code>class NiceDataBase : ILoader 
  {
      public async Task&lt;Data&gt; LoadAsync(int id)
      {
          //this database has async way of fetching the data
          return await NiceDataBaseDriver.LoadDataAsync(id);
      }
  }
  
  class NotNiceDataBase : ILoader 
  {
      public async Task&lt;Data&gt; LoadAsync(int id)
      {
          //this database's driver does not have aysnc methods, because it's old or done poorly.
          return await Task.Run(() =&gt; NotNiceDataBaseDriver.LoadData(id));
      }
  }
  </code></pre>
  
  <p>The NotNiceDataBase doesn't provide real async way to load the data, that's why I actually run it on a new thread, which, as I understand, is not really async, because real async does not use a new thread. Is my implementation of NotNiceDataBase a good one then? It kind of cheats the user to think that he is running a real async operation.</p>
  
  <p>What is the optimal way to deal with such situation? I think that the client of NotNiceDataBase should be completely aware what he is doing, otherwise he can't control performance of hiw application well.</p>
  
  <p>My interface could have additional Load method. But in such case, what's the real benefit here? Still LoadAsync of NotNiceDataBase would need to have some implementation. Throwing NotImplementedException is never a good solution I think.</p>