如何在Dart中实现解雇功能

时间:2020-01-13 00:49:31

标签: dart

我有以下Dart程序:

import 'package:pedantic/pedantic.dart';

Future someFunc() async {
  for (var i = 0; i < 100; i++) {
    print('Value of i in someFunc(): ' + i.toString());
  }
}

Future someOtherFunc() async {
  for (var i = 0; i < 100; i++) {
    print('Value of i in someOtherFunc(): ' + i.toString());
  }
}

Future<int> main() async {
  unawaited(someFunc());
  unawaited(someOtherFunc());
  print('End of program...');

  return 0;
}

执行此操作时,输出为:

Value of i in someFunc(): 0
Value of i in someFunc(): 1
Value of i in someFunc(): 2 
...
Value of i in someFunc(): 99
Value of i in someOtherFunc(): 0
Value of i in someOtherFunc(): 1
Value of i in someOtherFunc(): 2 
...
Value of i in someOtherFunc(): 99
End of program...

似乎所有内容都是同步执行的。我期待着这样的事情:

Value of i in someFunc(): 0
Value of i in someFunc(): 1
Value of i in someOtherFunc(): 0
Value of i in someFunc(): 3
End of program...
Value of i in someOtherFunc(): 1
(etc...)

如何在Dart中创建异步的“即发即弃”功能/方法?

1 个答案:

答案 0 :(得分:3)

之所以看到此代码是同步执行的,是因为Dart中的异步方法的执行就好像它们是同步的 直到第一个#> if (x == TRUE) print("y") 一样,此时该方法的执行是暂停,直到await完成为止。如果您在方法中执行实际的异步工作,则会看到与您期望的交错执行。

例如,这是对代码的一些轻微修改,将大致导致您期望的行为:

await

我强烈建议您阅读Dart event loop and microtask queue,这将使您更好地理解Dart中异步的工作原理