在我的网络工作者中,我必须在循环中进行大量处理。在C#或Java世界中,我将其编写如下(Java):
// main code:
public static void mainLoop() {
for (Iterator it=getIterator(); it.hasNext() && keepRunning; ) {
Object item = it.next();
processThisOne (item);
}
}
// async method
static boolean keepRunning = true;
public static void abort() {
keepRunning = false;
}
以上人员不会在网络工作者中工作。当主循环在上面运行时,后续的postMessage()调用将被处理。
我可以执行以下操作(现在使用打字稿):
// kicked off by postMessage event handler
public mainLoop () : void {
if (! keepRunning)
return;
Object item = it.next();
processThisOne (item);
worker.setTimeout(mainLoop, 0);
}
// also callable by postMessage event handler:
static boolean keepRunning = true;
public static void abort() {
keepRunning = false;
}
相反,我能基本上屈服如下吗?如果是这样,这是否很快(在setTimeout上的线程之间有任务切换)?
// kicked off by postMessage event handler
public mainLoop () : void {
for (Iterator it=getIterator(); it.hasNext() && keepRunning; ) {
Object item = it.next();
processThisOne (item);
// yield
worker.setTimeout(nothing, 0);
}
}
// called by setTimeout:
public static void nothing() {
}
// also callable by postMessage event handler:
static boolean keepRunning = true;
public static void abort() {
keepRunning = false;
}
如果以上工作,那么我的代码会更简单。问题是,setTimeout()是否会产生?或者它只是在我正在执行的处理结束后将该调用排队?
答案 0 :(得分:0)
我已经运行了一些测试,我相信答案是你必须退出你所在的方法.setTimeout()队列是方法,但是在网络工作者没有运行之前不会运行它。