Dado el siguiente método:esperan AsyncMethod() versus await await Task.Factory.StartNew <TResult> (AsyncMethod)
public async Task<MyObject> DoSomethingAsync() {
// do some work
await OpenSomeFileAsync();
return new MyObject();
}
¿Existe una diferencia entre:
public async void SomeEventHandler(EventArgs args) {
var myObject = await await Task.Factory.StartNew<Task<MyObject>>(DoSomethingAsync);
// do something with myObject
}
y:
public async void SomeEventHandler(EventArgs args) {
var myObject = await DoSomethingAsync();
// do something with myObject
}
Estaba pensando que la parte de "hacer algo de trabajo" de DoSomethingAsync ocurriría inmediatamente en una nueva tarea en el primer caso, pero para ser honesto, no entiendo completamente cómo funcionan las Tareas, la sincronización y la espera, y estoy bastante seguro de que estoy complicando demasiado las cosas por mí mismo.
EDIT:
Esta pregunta surgió de mirar este ejemplo Metro: http://code.msdn.microsoft.com/windowsapps/Sharing-Content-Target-App-e2689782
Específicamente en MainPage.xaml.cs, tienen la siguiente:
var unused = Task.Factory.StartNew(async() => { // some work... });
// unused is of type Task<TResult>
yo estaba tratando de volver a trabajar sin usar una función asíncrona anónima y comencé a preguntarme, ¿por qué no simplemente escribir un método asíncrono y esperarlo, en lugar de llamar a StartNew y entregar una función asíncrona?
¿Por qué quieres que escribirlo de esa manera? El objetivo de utilizar las nuevas palabras clave 'async' /' await' era que no era necesario. –
Parece un mal ejemplo de código fuera de uso –
Acabo de echar un vistazo, y ... Wow. Sí, ese código de "muestra oficial de SDK de Windows" es ** realmente malo **. ¡Creo que se las han arreglado para perder completamente el punto de 'async'! –