UWP/WinRT: 多个异步任务是否保证按创建顺序完成?
UWP/WinRT: Are multiple asynchronous tasks guaranteed to complete in the order created?
我有一个文本框,每次更新时我都想将其保存到磁盘。我已将 属性 数据绑定到其内容,并且我计划在 属性 的 setter 中添加代码以节省更改。我熟悉文本框 UpdateSourceTrigger 属性.
每次保存调用都会调用 WriteTextAsync
。如果文本框在每次有人输入时都保存,这可能会生成大量异步保存调用。我的简单问题是,异步写入调用是否保证不会冲突并按照其异步任务的创建顺序执行?
我已经通读了有关通用 [=19=] 平台异步编程的 guides,但我找不到任何明确说明这一点的内容。
您找不到任何明确说明这一点的内容。这正是多线程开发的本质。
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?
没有。它们肯定会在某个时候发生碰撞,并且在某些时候会保证从您开始它们时开始乱序执行。有限的测试可能会表明它没问题,但您会冒着出现上述问题的风险,这会很糟糕练习。
您可以创建一个跟踪更改的管理器。管理器会将所有请求的更改放入队列中,并且管理器是唯一更新文本文件的线程。
我有一个文本框,每次更新时我都想将其保存到磁盘。我已将 属性 数据绑定到其内容,并且我计划在 属性 的 setter 中添加代码以节省更改。我熟悉文本框 UpdateSourceTrigger 属性.
每次保存调用都会调用 WriteTextAsync
。如果文本框在每次有人输入时都保存,这可能会生成大量异步保存调用。我的简单问题是,异步写入调用是否保证不会冲突并按照其异步任务的创建顺序执行?
我已经通读了有关通用 [=19=] 平台异步编程的 guides,但我找不到任何明确说明这一点的内容。
您找不到任何明确说明这一点的内容。这正是多线程开发的本质。
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?
没有。它们肯定会在某个时候发生碰撞,并且在某些时候会保证从您开始它们时开始乱序执行。有限的测试可能会表明它没问题,但您会冒着出现上述问题的风险,这会很糟糕练习。
您可以创建一个跟踪更改的管理器。管理器会将所有请求的更改放入队列中,并且管理器是唯一更新文本文件的线程。