Task <>和IAsyncOperation <>之间有什么区别

use*_*719 16 .net task-parallel-library microsoft-metro

我正在写一个地铁应用程序.

这有效:

    HttpClient client = new HttpClient();
    var bytes = await client.GetByteArrayAsync(new Uri("www.microsoft.com"));
Run Code Online (Sandbox Code Playgroud)

这不是:

    var folder = Windows.Storage.ApplicationData.Current.LocalFolder;
    var file = await folder.GetFileAsync("text.txt");
Run Code Online (Sandbox Code Playgroud)

第一个返回Task <>,第二个返回IAsyncOperation <>

有什么不同?为什么有两种不同的类型?我该如何修复第二个样本?

Ste*_*ary 22

IAsyncOperation是一个城域异步操作.你可以awaitIAsyncOperation.

但是,您不能使用IAsyncOperation带有Task.WhenAllTask.WhenAny.要使用IAsyncOperation这些方法的实例,您应该调用StartAsTask扩展方法,如下所示:

var folder = Windows.Storage.ApplicationData.Current.LocalFolder;
var fileTask = folder.GetFileAsync("text.txt").AsTask();
Run Code Online (Sandbox Code Playgroud)

  • `StartAsTask`已更改为[`AsTask`,位于`System.Runtime.WindowsRuntime`](http://msdn.microsoft.com/en-us/library/hh779747(v = vs.110).aspx) . (9认同)