第二十章:异步和文件I/O.(十)

适应Windows运行时文件I/O.
Windows运行时API定义了一个全新的文件I / O类数组。 对此的部分推动力是认识到从桌面应用程序相对不受限制的文件访问向更沙盒化的环境转变的行业范围。
大多数新文件I / O API都可以在Windows运行时命名空间Windows.Storage和Windows.Storage.Streams中找到。 要存储应用程序专用的数据,Windows运行时程序首先获取一个特殊的StorageFolder对象:

StorageFolder localFolder = ApplicationData.Current.LocalFolder;

ApplicationData定义名为Current的静态属性,该属性返回应用程序的ApplicationData对象。 LocalFolder是ApplicationData的实例属性。
StorageFolder定义名为CreateFileAsync的方法以创建新文件,使用GetFileAsync来打开现有文件。这两个方法获取StorageFile类型的对象。使用该对象,程序可以使用OpenAsync或OpenReadAsync打开文件进行写入或读取。这些方法获取IRandomAccessStream对象。由此,创建DataWriter或DataReader对象以执行写入或读取操作。
这听起来有点冗长,而且确实如此。相当简单的方法涉及FileIO类的静态方法,它们类似于.NET File类的静态方法。对于文本文件,例如,FileIO.ReadTextAsync和FileIO.WriteTextAsync打开文件,执行读取或写入访问,并一次性关闭文件。这些方法的第一个参数是StorageFile对象。
无论如何,到目前为止,您无疑已经注意到这些方法名称上经常出现的Async后缀。在内部,所有这些方法都会分离执行的辅助线程以执行实际工作并快速返回给调用者。工作在后台进行,并通过回调函数通知调用者完成(或错误)。
为什么是这样?
当Windows 8首次创建时,Microsoft开发人员对时序进行了很好的审视,并决定执行任何需要超过50毫秒的函数调用应该是异步的,这样它就不会干扰用户界面的响应性。需要超过50毫秒的API显然包括文件I / O功能,这些功能通常需要访问可能较慢的硬件,如磁盘驱动器或网络。任何Windows运行时文件I / O.
可能导致物理存储设备被访问的方法是异步的并且给出了Async后缀。
但是,这些异步方法不返回Task对象。在Windows运行时中,返回数据的方法具有IAsyncOperation 的返回类型,而不返回信息的方法具有IAsyncAction的返回类型。这些接口都可以在System.Foundations命名空间中找到。
虽然这些接口与Task和Task 不同,但它们类似,您可以使用它们等待它们。您还可以在两个异步协议之间进行转换。 System.Runtime.WindowsRuntime程序集包含一个带有WindowsRuntimeSystemExtensions类的System命名空间,该类具有名为AsAsyncAction,AsAsyncOpertion和AsTask的扩展方法,用于执行这些转换。
让我们重新编写TextFileTryout程序以适应异步文件I / O.修订后的程序称为TextFileAsync,将在下一节中进行开发。由于将访问Windows项目中的异步文件I / O函数,因此IFileHelper接口中的所有文件函数都被定义为返回Task或Task 对象。
为什么删除红包码了呢?不允许赚点外块啊。
你的支持是我继续的动力啊。
123

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值