从Dart中的多个异步流修改对象

问题描述 投票:0回答:1

想象我们有一个像这样的对象

class Foo {
  List<int> data = [];

  void addAndCheck(int n){
    for(int number in data){
        // check something
    }
    data.add(n);
  }
}

并且想象我们产生了很多这样的订阅

Foo foo = Foo();

for(int i = 0; i++; i<10){
  subscriptions.add(api.someRandomStream().listen((response){
    foo.addAndCheck(response.value);
  }));
}

就目前而言,如果运行此代码可能会起作用,但是只要流大约在同一时间开始发出流,我们就会收到异常:Concurrent modification during iteration

原因是for循环,但是如何解决此问题?在像Java这样的语言中,有类似ConcurrentHashMap,Collections.synchronizedList(...)之类的东西。

想象一下,我们有一个像此类的对象Foo {List data = []; void addAndCheck(int n){for(int in data number){//检查内容} data.add(n); }}和...

multithreading dart concurrency stream
1个回答
2
投票

如果在迭代过程中遇到并发修改错误,则说明您正在循环内执行asynchronous

© www.soinside.com 2019 - 2024. All rights reserved.