- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我希望在 Dart 中创建一个 Isolate,我可以通过编程方式暂停和恢复。这是我使用的代码。
import 'dart:io';
import 'dart:isolate';
void main() async {
print("Starting isolate");
Isolate isolate;
ReceivePort receivePort = ReceivePort();
isolate = await Isolate.spawn(run, receivePort.sendPort);
print("pausing");
Capability cap = isolate.pause(isolate.pauseCapability);
sleep(Duration(seconds: 5));
print("Resuming");
isolate.resume(cap);
}
void run(SendPort sendPort) {
sleep(Duration(seconds: 2));
print("Woke up, 1");
sleep(Duration(seconds: 2));
print("Woke up, 2");
sleep(Duration(seconds: 2));
print("Woke up, 3");
sleep(Duration(seconds: 2));
print("Woke up, 4");
sleep(Duration(seconds: 2));
print("Woke up, 5");
}
我得到了一个像这样的 O/P
Starting isolate
pausing
Woke up, 1
Woke up, 2
Resuming
Woke up, 3
Woke up, 4
Woke up, 5
但是我想实现
Starting isolate
pausing
<--- 5 second delay --->
Resuming
Woke up, 1
Woke up, 2
Woke up, 3
Woke up, 4
Woke up, 5
但即使在调用 pause() 之后,Isolate 仍会继续运行。我找到了 this answer它说这是因为他们的情况是无限循环,但我没有使用任何循环。那么我在这里做错了什么?
最佳答案
您的问题是您在 pause
的文档中遗漏了一个细节关于隔离:
When the isolate receives the pause command, it stops processing events from the event loop queue. It may still add new events to the queue in response to, e.g., timers or receive-port messages. When the isolate is resumed, it starts handling the already enqueued events.
所以 pause
不会停止方法的执行,而只是确保在执行当前正在运行的方法之后,它将停止从事件队列中提供更多的工作。
同时 sleep
实现更像是“立即停止所有执行 N 次”,这更符合您的期望:
Use this with care, as no asynchronous operations can be processed in a isolate while it is blocked in a sleep call.
为了使您的示例正常工作,您需要将 sleep
调用替换为您正在等待的 Future
实例,因为这会在事件队列中添加事件。
import 'dart:async';
import 'dart:io';
import 'dart:isolate';
Future<void> main() async {
print("Starting isolate");
Isolate isolate;
ReceivePort receivePort = ReceivePort();
isolate = await Isolate.spawn(run, receivePort.sendPort);
print("pausing");
Capability cap = isolate.pause(isolate.pauseCapability);
sleep(const Duration(seconds: 5));
print("Resuming");
isolate.resume(cap);
}
Future<void> run(SendPort sendPort) async {
await Future<void>.delayed(const Duration(seconds: 2));
print("Woke up, 1");
await Future<void>.delayed(const Duration(seconds: 2));
print("Woke up, 2");
await Future<void>.delayed(const Duration(seconds: 2));
print("Woke up, 3");
await Future<void>.delayed(const Duration(seconds: 2));
print("Woke up, 4");
await Future<void>.delayed(const Duration(seconds: 2));
print("Woke up, 5");
}
输出:
Starting isolate
pausing
Resuming
Woke up, 1
Woke up, 2
Woke up, 3
Woke up, 4
Woke up, 5
关于dart - 无法暂停 Dart 隔离,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62122534/
我有一个相当冗长的命令行程序,它需要用户输入参数,然后使用这些参数进行处理。我想做的是将程序拆分为交互式和非交互式。我试图这样做,并打算让非交互式程序“调用”交互式程序并使用结果(参数),基于这些参数
谁能解释为什么我们在构造函数的参数中使用大括号。 class Cars { String carName; bool isAuto; // create the constructor
我想知道是否有Dart函数,例如PHP的 strrev()。如果没有,您能否请向我展示任何源代码如何自行实现? 谢谢。 最佳答案 我还没有在API中找到一个新的Dart用户(截至今天下午)。但是,以任
我有一个组件,我想根据一个 bool 值绑定(bind)一个不同的 css 类。我的组件代码中有以下内容: bindCssClass(div, "open", this, "task.isOpen")
我一直在研究如何在dart中播放.wav文件,并且已经能够通过dart:html库中定义的AudioElement成功完成此操作。但是,我对使用dart:web_audio库感兴趣,并且遇到了所有这些
Dart 是否旨在实现许多与 Haxe 相同的功能,以便能够针对其他语言和运行时?它是语言和工具的既定目标还是已知目标? 最佳答案 不。Dart 专门针对 web 应用程序开发(更具体地说,客户端 w
我正在尝试让 dart 正常工作。作为编辑器,我想使用 emacs dart-mode。我有两个关于在没有 dart 编辑器的情况下使用 dart 的问题: 1) 我是否需要手动调用 dart2js,
我正在使用列表来创建墨水瓶按钮。我想将列表放在一个单独的 dart 文件中,并将该文件导入到我使用列表的文件中。我不知道如何导入列表。 https://pastebin.com/mf0kvsGu 我制
我正在编写一个 flutter 应用程序,它通过蓝牙 (FlutterBlue) 向设备发送命令。该设备控制一些 LED。通信总体上运行良好,但是:在用户界面上,我有一个控制光强度的 slider 。
我正在使用来自 Get started: command-line and server apps | Dart 的说明.运行 dart --version 时,我得到: Dart VM versio
var c 返回 3 但 10/7=1.4285,其余为 0.4285,operator % 有错误? void main() { var a = 10; var b = 7; var c
如文档中所述: The const keyword isn’t just for declaring constant variables. You can also use it to create
在 Dart 中,我如何最好地编写相当于(不可变/值/非对象) 的代码输出或引用参数 ? 例如在 C#-ish 中,我可能会编码: function void example() { int re
Dart 支持的多重继承机制有哪些? 最佳答案 不,Dart 不支持多重实现继承。 Dart 具有接口(interface),并且与大多数其他类似语言一样,它具有多个接口(interface)继承。
我正在寻找有关如何制作可以采用位置子参数的 web 组件的资源。就像是: {{value}} // this could be any uneditable element {{value}
使用polymer.dart 的Dart 应用程序的pubspec.yaml 文件如下所示(来自Polymer.dart Code Lab): name: polymer_and_dart descr
今天我决定开始学习 Dart 语言,我从 Tour 开始,那里有一个例子: // These work in a const string. const aConstNum = 0; const aC
我正在查找字符串类和其他一些资源,试图了解如何格式化字符串。首先,我试图将数字填充到字符串中,但不是精度。 例子: int a = 0, b = 5, c = 15, d = 46; String
我知道的大部分是Javascript。我相信“列表”是 Dart 最接近数组的东西,但它们在技术上是一样的吗?将它们视为数组是错误的吗?同样, map 会被视为对象吗?我意识到可能存在差异,但进行这种
现在,白色背景刺痛了我的眼睛,因为这是一个looong的黑夜。是否可以从 Dart 编辑器 (v 0.1) 更改主题(更改为更暗的主题)?选择背景颜色和语法高亮怎么样? 最佳答案 是的,这是可能的,我
我是一名优秀的程序员,十分优秀!