Dato il seguente metodo:attendono AsyncMethod() rispetto attendono attendono Task.Factory.StartNew <TResult> (AsyncMethod)
public async Task<MyObject> DoSomethingAsync() {
// do some work
await OpenSomeFileAsync();
return new MyObject();
}
C'è una differenza tra:
public async void SomeEventHandler(EventArgs args) {
var myObject = await await Task.Factory.StartNew<Task<MyObject>>(DoSomethingAsync);
// do something with myObject
}
e:
public async void SomeEventHandler(EventArgs args) {
var myObject = await DoSomethingAsync();
// do something with myObject
}
Stavo pensando che la parte "fai un po 'di lavoro" di DoSomethingAsync avverrà immediatamente in una nuova attività in il primo caso, ma a dire il vero non capisco appieno come funzionano Tasks, async e await, e sono abbastanza sicuro che sto solo complicando le cose per me stesso.
EDIT:
Questa domanda nasce dalla guardando questo esempio Metro: http://code.msdn.microsoft.com/windowsapps/Sharing-Content-Target-App-e2689782
In particolare in MainPage.xaml.cs, hanno questa:
var unused = Task.Factory.StartNew(async() => { // some work... });
// unused is of type Task<TResult>
stavo cercando di rielaborarlo senza usare una funzione asincrona anonima e ho iniziato a chiedermi, perché non scrivere semplicemente un metodo asincrono e aspettarlo, invece di chiamare StartNew e passare una funzione asincrona?
Perché si vuole scrivere in quel modo? L'intero punto di utilizzo delle nuove parole chiave 'async' /' await' era che non dovevi. –
Sembra un brutto esempio di codice a disposizione –
Ho appena dato un'occhiata a me stesso, e ... Wow. Sì, quel codice "Sample Windows SDK ufficiale" è ** davvero pessimo **! Penso che siano riusciti a perdere completamente il punto di 'async'! –