Actualmente estoy tratando de hacer mi aplicación usando algunos métodos Async. Todo mi IO se realiza a través de implementaciones explícitas de una interfaz y estoy un poco confundido acerca de cómo hacer que las operaciones sean asincrónicas.
Como veo las cosas tengo dos opciones en la implementación:
interface IIO
{
void DoOperation();
}
OPCIÓN1: Realice una implementación implícita asíncrona y espere el resultado en la implementación implícita.
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
}
OPCIÓN 2: Realice la implementación explícita de forma asíncrona y espere la tarea de la implementación implícita.
class IOAsyncImplementation : IIO
{
private Task DoOperationAsync()
{
return new Task(() =>
{
//DO ALL THE HEAVY LIFTING!!!
});
}
#region IIOAsync Members
async void IIO.DoOperation()
{
await DoOperationAsync();
}
#endregion
}
¿Es una de estas implementaciones mejor que la otra o hay otro camino por recorrer en el que no estoy pensando?