是否可以取消对 worker.postMessage(..)
调用的单个操作的处理? ?
有 worker.terminate()
方法,但它会取消任何等待事件。而且它似乎让整个 worker 都死了,因为它对进一步的 react 没有反应 postMessage
电话。
另一方面,创建一个新的Worker
似乎没用对于每个任务,如果它们对大量公共(public)数据进行操作,则必须从 Worker
遍历这些数据至 Worker
通过主脚本,每次都克隆整个数据。
最佳答案
确实 worker.terminate()
杀死了线程。由于与 WebWorker 相关的内存和 CPU 开销相当大,因此这一事实可能代价高昂。
处理单个事件取消的方法是在 postMessage
回调中托管某种 Controller 逻辑。您的工作人员可以有状态,因此您必须在内部跟踪该状态并使用该信号量停止或启动进程。
一种方法可能是创建一个共享 Worker,它甚至可以跨选项卡使用,然后让该共享 Worker 在必要时处理您的其他线程。
关于javascript - 取消单个 Webworker 事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11041175/