diff --git a/src/dawn/native/d3d/QueueD3D.h b/src/dawn/native/d3d/QueueD3D.h
index 090a91d..ee9e7a4 100644
--- a/src/dawn/native/d3d/QueueD3D.h
+++ b/src/dawn/native/d3d/QueueD3D.h
@@ -45,11 +45,11 @@
 
     virtual ResultOrError<Ref<SharedFence>> GetOrCreateSharedFence() = 0;
 
+    ResultOrError<bool> WaitForQueueSerial(ExecutionSerial serial, Nanoseconds timeout) override;
+
   private:
     virtual void SetEventOnCompletion(ExecutionSerial serial, HANDLE event) = 0;
 
-    ResultOrError<bool> WaitForQueueSerial(ExecutionSerial serial, Nanoseconds timeout) override;
-
     MutexProtected<SerialMap<ExecutionSerial, SystemEventReceiver>> mSystemEventReceivers;
 };
 
diff --git a/src/dawn/native/d3d11/QueueD3D11.cpp b/src/dawn/native/d3d11/QueueD3D11.cpp
index 2689909..a368d92 100644
--- a/src/dawn/native/d3d11/QueueD3D11.cpp
+++ b/src/dawn/native/d3d11/QueueD3D11.cpp
@@ -27,6 +27,7 @@
 
 #include "dawn/native/d3d11/QueueD3D11.h"
 
+#include <limits>
 #include <utility>
 
 #include "dawn/native/d3d/D3DError.h"
@@ -53,10 +54,6 @@
                               ->CreateFence(0, D3D11_FENCE_FLAG_SHARED, IID_PPV_ARGS(&mFence)),
                           "D3D11: creating fence"));
 
-    // Create the fence event.
-    mFenceEvent = CreateEvent(nullptr, FALSE, FALSE, nullptr);
-    DAWN_ASSERT(mFenceEvent != nullptr);
-
     DAWN_TRY_ASSIGN(mSharedFence, SharedFence::Create(ToBackend(GetDevice()),
                                                       "Internal shared DXGI fence", mFence));
 
@@ -84,11 +81,6 @@
 }
 
 void Queue::DestroyImpl() {
-    if (mFenceEvent != nullptr) {
-        ::CloseHandle(mFenceEvent);
-        mFenceEvent = nullptr;
-    }
-
     // Release the shared fence here to prevent a ref-cycle with the device, but do not destroy the
     // underlying native fence so that we can return a SharedFence on EndAccess after destruction.
     mSharedFence = nullptr;
@@ -238,9 +230,9 @@
 MaybeError Queue::WaitForIdleForDestruction() {
     DAWN_TRY(NextSerial());
     // Wait for all in-flight commands to finish executing
-    DAWN_TRY(WaitForSerial(GetLastSubmittedCommandSerial()));
-
-    return {};
+    DAWN_TRY_ASSIGN(std::ignore, WaitForQueueSerial(GetLastSubmittedCommandSerial(),
+                                                    std::numeric_limits<Nanoseconds>::max()));
+    return CheckPassedSerials();
 }
 
 MaybeError Queue::NextSerial() {
@@ -257,18 +249,6 @@
     return {};
 }
 
-MaybeError Queue::WaitForSerial(ExecutionSerial serial) {
-    DAWN_TRY(CheckPassedSerials());
-    if (GetCompletedCommandSerial() >= serial) {
-        return {};
-    }
-
-    DAWN_TRY(CheckHRESULT(mFence->SetEventOnCompletion(uint64_t(serial), mFenceEvent),
-                          "D3D11 set event on completion"));
-    WaitForSingleObject(mFenceEvent, INFINITE);
-    return CheckPassedSerials();
-}
-
 void Queue::SetEventOnCompletion(ExecutionSerial serial, HANDLE event) {
     mFence->SetEventOnCompletion(static_cast<uint64_t>(serial), event);
 }
diff --git a/src/dawn/native/d3d11/QueueD3D11.h b/src/dawn/native/d3d11/QueueD3D11.h
index c20e72f..ef7a8c6 100644
--- a/src/dawn/native/d3d11/QueueD3D11.h
+++ b/src/dawn/native/d3d11/QueueD3D11.h
@@ -50,7 +50,6 @@
         SubmitMode submitMode);
     MaybeError SubmitPendingCommands() override;
     MaybeError NextSerial();
-    MaybeError WaitForSerial(ExecutionSerial serial);
 
     // Separated from creation because it creates resources, which is not valid before the
     // DeviceBase is fully created.
@@ -90,7 +89,6 @@
     MaybeError CheckAndMapReadyBuffers(ExecutionSerial completedSerial);
 
     ComPtr<ID3D11Fence> mFence;
-    HANDLE mFenceEvent = nullptr;
     Ref<SharedFence> mSharedFence;
     MutexProtected<CommandRecordingContext, CommandRecordingContextGuard> mPendingCommands;
     std::atomic<bool> mPendingCommandsNeedSubmit = false;
diff --git a/src/dawn/native/d3d12/QueueD3D12.cpp b/src/dawn/native/d3d12/QueueD3D12.cpp
index 39bd61b..a358f85 100644
--- a/src/dawn/native/d3d12/QueueD3D12.cpp
+++ b/src/dawn/native/d3d12/QueueD3D12.cpp
@@ -27,6 +27,7 @@
 
 #include "dawn/native/d3d12/QueueD3D12.h"
 
+#include <limits>
 #include <utility>
 
 #include "dawn/common/Math.h"
@@ -73,9 +74,6 @@
                                                    D3D12_FENCE_FLAG_SHARED, IID_PPV_ARGS(&mFence)),
                           "D3D12 create fence"));
 
-    mFenceEvent = CreateEvent(nullptr, FALSE, FALSE, nullptr);
-    DAWN_ASSERT(mFenceEvent != nullptr);
-
     DAWN_TRY_ASSIGN(mSharedFence, SharedFence::Create(ToBackend(GetDevice()),
                                                       "Internal shared DXGI fence", mFence));
 
@@ -88,11 +86,6 @@
     mPendingCommands.Release();
     mCommandQueue.Reset();
 
-    if (mFenceEvent != nullptr) {
-        ::CloseHandle(mFenceEvent);
-        mFenceEvent = nullptr;
-    }
-
     // Release the shared fence here to prevent a ref-cycle with the device, but do not destroy the
     // underlying native fence so that we can return a SharedFence on EndAccess after destruction.
     mSharedFence = nullptr;
@@ -167,11 +160,9 @@
     if (GetCompletedCommandSerial() >= serial) {
         return {};
     }
-    DAWN_TRY(CheckHRESULT(mFence->SetEventOnCompletion(uint64_t(serial), mFenceEvent),
-                          "D3D12 set event on completion"));
-    WaitForSingleObject(mFenceEvent, INFINITE);
-    DAWN_TRY(CheckPassedSerials());
-    return {};
+    DAWN_TRY_ASSIGN(std::ignore,
+                    WaitForQueueSerial(serial, std::numeric_limits<Nanoseconds>::max()));
+    return CheckPassedSerials();
 }
 
 bool Queue::HasPendingCommands() const {
diff --git a/src/dawn/native/d3d12/QueueD3D12.h b/src/dawn/native/d3d12/QueueD3D12.h
index 22a88fc..8a997fb 100644
--- a/src/dawn/native/d3d12/QueueD3D12.h
+++ b/src/dawn/native/d3d12/QueueD3D12.h
@@ -79,7 +79,6 @@
     void SetLabelImpl() override;
 
     ComPtr<ID3D12Fence> mFence;
-    HANDLE mFenceEvent = nullptr;
     Ref<SharedFence> mSharedFence;
 
     CommandRecordingContext mPendingCommands;
