diff --git a/src/node.h b/src/node.h
index cae0673a37f80e..a94bd286c35f73 100644
--- a/src/node.h
+++ b/src/node.h
@@ -273,10 +273,11 @@ class NODE_EXTERN MultiIsolatePlatform : public v8::Platform {
   // This function may only be called once per `Isolate`.
   virtual void RegisterIsolate(v8::Isolate* isolate,
                                struct uv_loop_s* loop) = 0;
-  // This needs to be called right before calling `Isolate::Dispose()`.
+
   // This function may only be called once per `Isolate`, and discard any
   // pending delayed tasks scheduled for that isolate.
   virtual void UnregisterIsolate(v8::Isolate* isolate) = 0;
+
   // The platform should call the passed function once all state associated
   // with the given isolate has been cleaned up. This can, but does not have to,
   // happen asynchronously.
diff --git a/src/node_worker.cc b/src/node_worker.cc
index 025b5fed49cbb5..af79540631f153 100644
--- a/src/node_worker.cc
+++ b/src/node_worker.cc
@@ -155,9 +155,9 @@ class WorkerThreadData {
     w_->platform_->AddIsolateFinishedCallback(isolate, [](void* data) {
       *static_cast<bool*>(data) = true;
     }, &platform_finished);
-    w_->platform_->UnregisterIsolate(isolate);
 
     isolate->Dispose();
+    w_->platform_->UnregisterIsolate(isolate);
 
     // Wait until the platform has cleaned up all relevant resources.
     while (!platform_finished)