2012-04-05 15 views
13

Sto scrivendo un'app Metro.Qual è la differenza tra Task <> e IAsyncOperation <>

Questo funziona:

HttpClient client = new HttpClient(); 
    var bytes = await client.GetByteArrayAsync(new Uri("www.microsoft.com")); 

Questo non lo fa:

var folder = Windows.Storage.ApplicationData.Current.LocalFolder; 
    var file = await folder.GetFileAsync("text.txt"); 

La prima restituisce un Task <>, il secondo restituisce un IAsyncOperation <>

Qual è il differenza? Perché ci sono due tipi diversi? Come posso aggiustare il secondo campione?

+1

Cosa vuoi dire, la seconda non funziona? Che cosa fa? – svick

risposta

19

IAsyncOperation è un'operazione asincrona della metropolitana. È possibile await un IAsyncOperation.

Tuttavia, non è possibile utilizzare IAsyncOperation con Task.WhenAll o Task.WhenAny. Per utilizzare IAsyncOperation casi con questi metodi, è necessario chiamare il metodo StartAsTask estensione, in quanto tale:

var folder = Windows.Storage.ApplicationData.Current.LocalFolder; 
var fileTask = folder.GetFileAsync("text.txt").StartAsTask(); 
+1

Quale spazio dei nomi è il metodo di estensione StartAsTask() definito? –

+8

'StartAsTask' è stato modificato in [' AsTask', che si trova in 'System.Runtime.WindowsRuntime'] (http://msdn.microsoft.com/en-us/library/hh779747 (v = vs.110) .aspx). –

Problemi correlati