2012-04-05 18 views
13

Estoy escribiendo una aplicación de metro.Cuál es la diferencia entre Task <> y IAsyncOperation <>

Esto funciona:

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

Esto no es así:

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

El primero vuelve una tarea <>, la segunda devuelve un IAsyncOperation <>

¿Cuál es el ¿diferencia? ¿Por qué hay dos tipos diferentes? ¿Cómo puedo arreglar la segunda muestra?

+1

¿Qué quiere decir, el segundo no funciona? ¿Qué hace? – svick

Respuesta

19

IAsyncOperation es una operación asincrónica de metro. Puede await y IAsyncOperation.

Sin embargo, no puede usar IAsyncOperation con Task.WhenAll o Task.WhenAny. Para utilizar IAsyncOperation casos con estos métodos, se debe llamar al método StartAsTask extensión, tales como:

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

¿Qué espacio de nombre es el método de extensión StartAsTask() definido? –

+8

'StartAsTask' ha cambiado a [' AsTask', que está en 'System.Runtime.WindowsRuntime'] (http://msdn.microsoft.com/en-us/library/hh779747 (v = vs.110) .aspx) –

Cuestiones relacionadas