Dec 16, 2008, в 9:43 AM, Ian Hickson написал(а):

1) The algorithm assumes that a WorkerGlobalScope exists, and doesn't
specify what happens if it is invoked before WorkerGlobalScope is
created (e.g. if the script is still being loaded, or the scope is being
created, but Worker.terminate() is called from JS). I think that the
right behavior is to re-invoke the algorithm after the scope is created,
because it may be too late to prevent its creation.

It can't be invoked before the WorkerGlobalScope is created. The
WorkerGlobalScope is created before the constructor returns the Worker
object.

This means that creating a Worker would involve running a nested run loop, waiting for WorkerGlobalScope to be created in another thread/ process. I think that WorkerGlobalScope needs to be created asynchronously. The above is the only observable difference with synchronous creation that I could find, so I think that requiring synchronous operation is unnecessary.

2) Events in WorkerGlobalScope event queue are dropped when terminating a worker, but messages posted to Worker are not. I think that the expected behavior is that after calling Worker.terminate(), no messages will be
dispatched to worker's event listeners.

Once 'closing' is set to true, the queue discards any additional tasks.


There is no "closing" flag on the Worker object, it's only defined on WorkerGlobalScope as far as I can see.

- WBR, Alexey Proskuryakov


Reply via email to