What is the difference between Task<> and IAsyncOperation<>

.net, microsoft-metro, task-parallel-library

Solution

`IAsyncOperation` is a metro asynchronous operation. You can `await` an `IAsyncOperation`.

However, you can't use `IAsyncOperation` with `Task.WhenAll` or `Task.WhenAny`. To use `IAsyncOperation` instances with these methods, you should call the `AsTask` extension method (formerly `StartAsTask`) from `System.Runtime.WindowsRuntime`, as such:

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

Problem

I am writing a metro app. This works: ``` HttpClient client = new HttpClient(); var bytes = await client.GetByteArrayAsync(new Uri("www.microsoft.com")); ``` This doesn't: ``` var folder = Windows.Storage.ApplicationData.Current.LocalFolder; var file = await folder.GetFileAsync("text.txt"); ``` The first one returns a Task<>, the second one return an IAsyncOperation<> What is the difference? Why are there two different types? How can I fix the second sample?

Original source