【问题标题】:What happens if two dart asynchronous functions try to add to the same List concurrently?如果两个 dart 异步函数尝试同时添加到同一个 List 会发生什么?
【发布时间】:2020-02-11 09:21:03
【问题描述】:

dart 是否处理异步函数的两个不同调用尝试同时将两个(或更多)对象添加到 List 的情况?如果没有,我有办法处理吗?

我不需要以特定顺序插入这两个新对象,因为我稍后会处理,我只是徘徊在不太可能但仍然可能的情况下会发生什么

【问题讨论】:

  • dart 代码在一个单线程中执行,所以:是的,那些 async 函数可以将它添加到一个 linst

标签: asynchronous flutter dart concurrency async-await


【解决方案1】:

如果您想知道是否需要任何类型的锁定来防止List 数据结构本身中的竞争条件,没有。正如pskink noted in a comment,每个 Dart isolate 在自己的线程中运行,并且正如“隔离”名称所暗示的那样,内存是不共享的。因此,两个操作不能同时主动更新List。一旦所有异步操作完成,您的List 将包含所有添加的项目,但不保证任何顺序。

如果您需要防止异步操作被交错,您可以使用package:pool

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-11-15
    • 1970-01-01
    • 1970-01-01
    • 2022-11-26
    • 1970-01-01
    • 2019-08-31
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多