UWP / WinRT:是否保证在创建的顺序中完成多个异步任务?

时间:2015-08-19 20:46:28

标签: asynchronous windows-runtime win-universal-app c++-cx

我有一个文本框,我想在每次更新时不断保存到磁盘。我已经将属性数据绑定到其内容,我计划在属性的setter中添加代码以保存更改。我熟悉Textbox UpdateSourceTrigger属性。

每次保存调用都会调用WriteTextAsync。如果文本框在每次有人输入时都保存,这可能会产生大量的异步保存调用。我的简单问题是,异步写入调用是否保证不会以创建异步任务的顺序发生冲突和执行?

我已经阅读了关于通用Windows平台异步编程的guides,我找不到任何明确说明这一点。

1 个答案:

答案 0 :(得分:4)

你不会发现任何明确说明这一点。这只是多线程开发的本质。

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?

不。它们保证在某些时候发生碰撞,并且在某些时候保证完全按照你的启动顺序完成执行。有限的测试可能会显示它没问题,但是你会冒上述问题的风险而且会很糟糕实践。

您可以创建一个跟踪更改的管理器。管理器会将所有请求的更改放入队列中,Manager是唯一更新文本文件的线程。