Task<>和IAsyncOperation<>有什么区别?

24

我正在编写一个Metro应用程序。

这个是有效的:

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

这样不行:

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

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

它们之间有什么区别?为什么会有两种不同的类型?我该如何修复第二个示例?


1
你是说第二个不起作用?那它具体实现了什么功能呢? - svick
1个回答

29

IAsyncOperation是一个Metro异步操作。你可以用await等待IAsyncOperation的完成。

但是,你不能在Task.WhenAllTask.WhenAny中使用IAsyncOperation。要将IAsyncOperation实例与这些方法一起使用,你应该从System.Runtime.WindowsRuntime调用AsTask扩展方法(以前称为StartAsTask),如下所示:

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

1
StartAsTask() 扩展方法定义在哪个命名空间中? - justin.m.chase
11
"StartAsTask" 已更改为 AsTask,位于 System.Runtime.WindowsRuntime 中。 - Stephen Cleary

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接