apache-flex - 我需要担心 Flex/AIR 代码中的并发问题吗?

标签 apache-flex actionscript air

我有一种情况,我正在启动许多对象,当它们准备好处理一些输入数据时,调用一个处理程序。

该处理程序从待处理请求的 ArrayCollection 中获取数据集,将其分配给对象,然后从 ArrayCollection 中删除数据集。

(我无法从 ArrayCollection 中弹出,因为我需要搜索它以找到合适的数据集 - 它并不总是最重要的。)

是否有可能两个对象可以通过以下方式调用我的处理程序:(1)第一个被分配一个数据集,(2)第二个被分配相同的数据集,然后服务于第一个的处理程序实例删除它,我猜(3) 试图从 ArrayCollection 中删除数据集时处理程序的第二个实例出错。

我对 Flash Player 运行时不够熟悉,不知道这种故障情况是否可能发生,或者我是否应该花额外的时间来设置某种锁定以防止它发生。

编辑:到目前为止,答案对 Flex 给出了热烈的评价,但我不确定他们是否回答了这个问题。需要明确的是,我并不是要决定是否使用 Flex。

如果我有一个方法:

  • 从 ArrayCollection
  • 的某处获取一条数据
  • 对这些数据进行处理
  • 从 ArrayCollection
  • 中删除该数据

    是否有可能在第一次调用 #1 之后但在 #3 之前,同一方法的另一个调用可以执行 #1?

    le dorfier,您说 Flex/AS “正常工作” - 你能澄清一下它在这种情况下“正常工作”吗?

    最佳答案

    您不需要进行锁定,但您可能想要跟踪对您的状态的修改顺序。正在运行的不同异步调用可能会以与发出异步调用时不同的顺序返回和修改模型状态。

    Flex 和 AIR 应用程序具有单线程编程模型。然而,他们的架构依赖于异步 I/O 来与服务器层进行交互。

    现在在 Java Swing 应用程序或 .NET Winforms 应用程序中,可能会在后台线程上进行 i/o 交互,并将参数/结果编码到主 GUI 线程或从主 GUI 线程编码。 (那些图形 UI 库不允许其他线程更改图形工具包对象/小部件的状态,因此数据交互必须与其他后台处理线程进行编码。)

    相比之下,Flex 和 AIR 的 i/o 类库是在这些类异步实现 i/o 操作的地方编写的。例如,要执行 HTTP GET,可以调用 HttpSerivce send() 方法,这不是阻塞调用。相反,只要调用最终完成并返回,就可以提供一个 ActionScript3 闭包来处理结果。

    同时,Flex/AIR 应用程序可以允许 GUI 继续与用户完全交互。它甚至可以显示进度指示器和/或取消按钮。

    因此事实证明,尽管 Flex/AIR 单线程 GUI 模型比多线程 Java Swing 或 .NET Winform 应用程序更简单、更易于编程,但它能够实现与那些富客户端应用程序。

    一个简单的事件驱动的单线程 GUI、异步 i/o(通过服务调用和/或消息传递),再加上用于处理结果或故障的 ActionScript3 闭包,是 Flex/AIR 统治世界的秘诀。 (当然,我应该提到对属性、事件和良好的声明式(或命令式)数据绑定(bind)的良好支持,作为这个世界征服战略的一部分。)

    关于apache-flex - 我需要担心 Flex/AIR 代码中的并发问题吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/430347/

    相关文章:

    Flash API的Java实现

    loops - 循环增量值

    没有 services-config.xml 的 Flash RemoteObject Weborb 连接(无 Flex)

    flash - 使用 renderMode=GPU 的 iPad AIR 应用程序的性能突然下降

    android - 支持 Android AIR AS3 的多种屏幕尺寸

    actionscript-3 - 为什么不播放此嵌入式声音文件?

    java - 无法在新线程中从 FREContext 调用 getActivity()?

    javascript - AS3 中的 jquery each() 函数

    actionscript-3 - DisplacementMapFilter 是如何工作的?

    apache-flex - 什么时候 IIS7 的负载过多?