代码之家  ›  专栏  ›  技术社区  ›  Shubhamhackz

为什么在下面的程序中异步函数在同步之前被调用?

  •  1
  • Shubhamhackz  · 技术社区  · 7 年前
    showAsync() {
      print('Async Function Call!!');    
    }
    
    show() async {
      await showAsync();
      print('all done!!');
    }
    
    showSync() {
      print('Sync Function Call!');
    }
    
    main(List<String> args) {
      show();
      showSync();
    }
    

    输出:

    Async Function Call!!
    Sync Function Call!
    all done!!
    
    1 回复  |  直到 7 年前
        1
  •  2
  •   Vinicius Braz Pinto    7 年前

    这个 showAsync 函数并没有执行任何需要等待的操作,所以它只是执行。如果更改为以下内容,则其他功能将首先打印:

    showAsync() {
      Future.delayed(Duration(seconds: 1), () {
        print('Async Function Call!!');
      });
    }
    

    正如格内特在评论中指出的那样: 在Dart 1.x中,异步函数立即暂停执行。在Dart 2中,异步函数不是立即挂起,而是同步执行,直到第一次等待或返回。 “(引用Dart文件)。

    所以,如果你再加上一个 await showAsync()

    https://www.dartlang.org/tutorials/language/futures