title: Making interface implementations async
body: <p>I’m currently trying to make my application using some Async methods.
  All my IO is done through explicit implementations of an interface and I am a bit confused about how to make the operations async.</p>
  
  <p>As I see things I have two options in the implementation:</p>
  
  <pre><code>interface IIO
  {
      void DoOperation();
  }
  </code></pre>
  
  <p><strong>OPTION1:</strong>
  Do an implicit implementation async and await the result in the implicit implementation.</p>
  
  <pre><code>class IOImplementation : IIO
  {
  
       async void DoOperation()
      {
          await Task.Factory.StartNew(() =&gt;
              {
                  //WRITING A FILE OR SOME SUCH THINGAMAGIG
              });
      }
  
      #region IIO Members
  
      void IIO.DoOperation()
      {
          DoOperation();
      }
  
      #endregion
  }
  </code></pre>
  
  <p><strong>OPTION2:</strong>
  Do the explicit implementation async and await the task from the implicit implementation.</p>
  
  <pre><code>class IOAsyncImplementation : IIO
  {
      private Task DoOperationAsync()
      {
          return new Task(() =&gt;
              {
                  //DO ALL THE HEAVY LIFTING!!!
              });
      }
  
      #region IIOAsync Members
  
      async void IIO.DoOperation()
      {
          await DoOperationAsync();
      }
  
      #endregion
  }
  </code></pre>
  
  <p>Are one of these implementations better than the other or is there another way to go that I am not thinking of?</p>