gpt4 book ai didi

powerapps - PowerApps 中的事件处理和线程安全

转载 作者:行者123 更新时间:2023-12-02 01:04:50 24 4
gpt4 key购买 nike

除了用户事件之外,Powerapps 还支持计时器事件。这引入了并发计时器访问全局变量或集合的可能性。文档没有提供有关事件处理的信息(并发与顺序、消息泵与回调)。 Powerapps 社区论坛一片寂静。我在这里发帖询问 SO 社区是否在重新发明轮子之前已经对此进行了测试。 (所以搜索没有发现相关主题,如果有,很乐意接受纠正)。

示例用例是使用计时器分离和支持条形码注册和数据传输。 IE。想象一家杂货店结账。

如果没有可用的现有信息,将报告调查结果。

最佳答案

PowerApps 基于 JavaScript 构建,它是单线程 (*),基于回调。每个表达式都作为一个“执行单元”执行,所以如果你有类似的东西:

UpdateContext({ a: 1, b: 2 }); UpdateContext({ c: a + b })

您可以相信 'a' 和 'b' 将一起初始化(不会被中断)。但是,您不能依赖这样一个事实,即第二次 UpdateContext 调用将在可能更改“a”或“b”的值(例如计时器的 OnTimerEnd 表达式)的任何事情发生之前进行 - 尽管这不太可能发生.

对于定时器的具体例子,如果你有两个用这个表达式:

Set(globalVarA, globalVarA + 1)

有可能(尽管不太可能,尤其是对于这种简单的操作)在调用 Set 函数的内部实现以更新两个计时器的值之前,将为两个计时器计算“globalVarA + 1”的值变量(在这种情况下,应用程序将“丢失”其中一个增量)。

更可能发生问题的场景是当您调用数据源时(涉及速度较慢的网络调用)。例如,如果您在两个计时器上使用此表达式:

Set(oldVar1, var1);
Patch(dataSource, record, changes);
Set(var1, oldVar1 + 1)

然后竞争条件发生的可能性增加了很多。

希望这对您有所帮助!

(*) 目前 JS 工作线程的使用非常有限,因此该应用在技术上不是完全单线程的,但这应该不会影响您编写的表达式。

关于powerapps - PowerApps 中的事件处理和线程安全,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48426028/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com