【问题标题】:UWP/WinRT: Are multiple asynchronous tasks guaranteed to complete in the order created?UWP/WinRT:是否保证多个异步任务按创建的顺序完成?
【发布时间】:2015-11-13 08:03:20
【问题描述】:
我有一个文本框,我想在每次更新时将其不断保存到磁盘。我已将属性数据绑定到其内容,并且我计划在属性的设置器中添加代码以节省更改。我熟悉 Textbox UpdateSourceTrigger 属性。
每次保存调用都会调用WriteTextAsync。如果每次有人输入时文本框都会保存,这可能会生成大量异步保存调用。我的简单问题是,异步写入调用是否保证不会发生冲突并按照创建异步任务的顺序执行?
我已经阅读了关于通用 Windows 平台异步编程的 guides,但我找不到任何明确说明这一点的内容。
【问题讨论】:
标签:
asynchronous
windows-runtime
win-universal-app
c++-cx
【解决方案1】:
您不会找到任何明确说明这一点的内容。这只是多线程开发的本质。
this could be generating a ton of asynchronous save calls
你的常识是正确的。可能出现的问题:
保存可能会出现乱序。
如果您每次都关闭并打开文件,保存可能会相互冲突导致访问异常。
My simple question is, are the asynchronous write calls guaranteed to not collide and to execute in the order in which their asynchronous tasks were created?
不。它们保证在某个时候发生碰撞,并且在某个时候保证从你开始它们时开始无序地完成执行。有限的测试可能会表明它是可以的,但你会冒上述问题的风险,这会很糟糕练习。
您可以创建一个管理器来跟踪更改。管理器会将所有请求的更改放入队列中,并且管理器是唯一更新文本文件的线程。