【问题标题】:Why in this code, await is not blocking ui in flutter为什么在这段代码中,await 不会阻塞 ui
【发布时间】:2020-10-30 13:05:00
【问题描述】:

在默认示例应用程序中,每当您创建新的 fultter 项目时,我只是添加了以下代码。

  initState() {
    super.initState();
    loop();
  }

  loop() async {
    while (true) {
      await Future.delayed(Duration(milliseconds: 10));
      print("count now:$_counter");
    }
  }
  1. 为什么应用程序 UI 没有被阻止?我可以单击 + 按钮,并且计数器平稳增加。即使我将延迟更改为 10 秒,UI 也是响应式的。 loop() 是否在不同的线程中运行?但我知道飞镖是单线程的。怎么可能?

  2. 循环函数在哪里运行?

  3. 我可以使用这种技术来运行后台任务,例如检查 id 我的 sqflite 表行是否与云同步等???

【问题讨论】:

  • 3)。不,尝试用简单的“等待”以外的东西来占用 CPU,你会看到不同的
  • await 只是在Future 上注册完成回调的语法糖。

标签: multithreading flutter dart async-await


【解决方案1】:

Await 调用是非阻塞的。 其工作方式是,虽然 Dart 是单线程的,但一些 Dart 代码将其实现委托给 Dart VM。

文件读取或 HTTP 请求等操作在 Dart 之外(由浏览器或 c++ 中)在不同的线程中执行。

所以虽然 Dart 是单线程的,但它仍然能够同时执行多个任务而不锁定 UI。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-08-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-07-14
    相关资源
    最近更新 更多