gpt4 book ai didi

Dart Isolates 的暂停功能未按预期工作

转载 作者:行者123 更新时间:2023-12-05 00:13:50 30 4
gpt4 key购买 nike

我一直在玩 Dart Isolates并且在使用 isolate.pause(); 时遇到了问题功能。

import 'dart:io';
import 'dart:isolate';

main(){
ReceivePort receivePort = new ReceivePort();
Isolate.spawn(isolateEntryPoint, receivePort.sendPort).then((isolate){
isolate.pause(isolate.pauseCapability);
});
}

void isolateEntryPoint(SendPort sendPort){
while(true){
print("isolate is running");
sleep(new Duration(seconds: 2));
}
}

在我的示例中,隔离基本上每 2 秒打印一次。

从我在 docs 上读到的内容,我的理解是上面的代码应该:
  • 产生一个隔离
  • 立即暂停隔离

  • 但它不起作用,即使在我告诉它暂停之后,隔离仍在运行并且每 2 秒打印一次“隔离正在运行”。

    我知道您可以通过传入 paused: true 来启动处于暂停状态的隔离。可选参数: Isolate.spawn(isolateEntryPoint, receivePort, paused: true)... .然而,最终我希望能够在任何时候暂停隔离,而不是立即暂停。

    我能找到的关于使用它的唯一文档是官方 dart 文档,所以我可能正在使用 isolate.pause()功能不正确。但无论哪种方式,演示此函数正确用法的代码示例都将不胜感激。

    最佳答案

    您是正确的,这没有按您的预期工作。

    隔离暂停功能通过暂停事件队列来工作。当前正在执行的事件将完成,然后在您恢复隔离之前不会处理进一步的事件。暂停不会影响正在运行的代码。

    在这段代码中,隔离入口点正在运行一个带有内置延迟的无限循环。它永远不会返回到事件队列。如果您在循环中安排了任何异步操作,它们将永远不会执行。 sleep原语使整个隔离物休眠,但这与什么都不做没有什么不同(只是需要更长的时间)。

    您尝试“立即暂停”新的隔离,但隔离并发运行,并且当 Isolate 时,新的隔离已经开始执行其入口点函数。对象被返回。

    以后可能会改变isolate的功能,更急切地处理控制消息,如果我们不再需要支持编译成JavaScript的isolates,但是目前isolates控制消息实际上是异步的,它们才生效在 Dart 事件队列的事件之间。

    关于Dart Isolates 的暂停功能未按预期工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48130287/

    30 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com