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.
As I see things I have two options in the implementation:
interface IIO
{
    void DoOperation();
}
OPTION1: Do an implicit implementation async and await the result in the implicit implementation.
class IOImplementation : IIO
{
     async void DoOperation()
    {
        await Task.Factory.StartNew(() =>
            {
                //WRITING A FILE OR SOME SUCH THINGAMAGIG
            });
    }
    #region IIO Members
    void IIO.DoOperation()
    {
        DoOperation();
    }
    #endregion
}
OPTION2: Do the explicit implementation async and await the task from the implicit implementation.
class IOAsyncImplementation : IIO
{
    private Task DoOperationAsync()
    {
        return new Task(() =>
            {
                //DO ALL THE HEAVY LIFTING!!!
            });
    }
    #region IIOAsync Members
    async void IIO.DoOperation()
    {
        await DoOperationAsync();
    }
    #endregion
}
Are one of these implementations better than the other or is there another way to go that I am not thinking of?
 
     
     
     
    