Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/dart/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/xpath/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Dart 当多个未来/计时器同时完成时是否存在竞争条件_Dart_Race Condition - Fatal编程技术网

Dart 当多个未来/计时器同时完成时是否存在竞争条件

Dart 当多个未来/计时器同时完成时是否存在竞争条件,dart,race-condition,Dart,Race Condition,如果在Dart中同时完成多个计时器/未来,是否会有竞争条件?例如,在以下代码中访问计时器完成处理程序中的test和test结构时是否存在竞争条件 import 'dart:async'; void main() { Map<String, int> test = {}; List<int> test2 = []; Timer t1 = Timer(Duration(seconds: 1), () { test['a'] = 45; test

如果在Dart中同时完成多个计时器/未来,是否会有竞争条件?例如,在以下代码中访问计时器完成处理程序中的
test
test
结构时是否存在竞争条件

import 'dart:async';

void main() {
  Map<String, int> test = {};
  List<int> test2 = [];

  Timer t1 = Timer(Duration(seconds: 1), () {
    test['a'] = 45;
    test2.add(1);
  });

  Timer t2 = Timer(Duration(seconds: 1), () {
    test['b'] = 67;
    test2.add(2);
  });

  Timer t3 = Timer(Duration(seconds: 2), () {
    print(test);
    print(test2);
  });
}
导入'dart:async';
void main(){
Map test={};
列表test2=[];
计时器t1=计时器(持续时间(秒数:1),(){
测试['a']=45;
测试2.添加(1);
});
计时器t2=计时器(持续时间(秒:1),(){
测试['b']=67;
test2.add(2);
});
计时器t3=计时器(持续时间(秒数:2),(){
打印(测试);
打印(测试2);
});
}

或者,计时器/未来完成是否由主线程同步处理?两个回调中的代码可以相互交织吗?

每个Dart隔离在一个线程中执行代码。在单个Dart隔离中运行的异步代码可以并发运行,但不能并行运行

通常,如果回调本身执行异步工作,那么它们可以被交错。任何
wait
(相当于任何
Future.then()
回调)是执行返回到事件循环的点,中断异步函数

在您的特定示例中,回调是完全同步的,不能被中断。由于事件已添加到FIFO队列,因此您的
计时器可能会按定义的顺序启动。然而,这似乎很脆弱,我不认为依赖回调排序是一个好主意


另请参见:.

每个Dart隔离在单个线程中执行代码。在单个Dart隔离中运行的异步代码可以并发运行,但不能并行运行

通常,如果回调本身执行异步工作,那么它们可以被交错。任何
wait
(相当于任何
Future.then()
回调)是执行返回到事件循环的点,中断异步函数

在您的特定示例中,回调是完全同步的,不能被中断。由于事件已添加到FIFO队列,因此您的
计时器可能会按定义的顺序启动。然而,这似乎很脆弱,我不认为依赖回调排序是一个好主意

另请参见: