diff --git a/p2p/BUILD.gn b/p2p/BUILD.gn
index 7ccad67..8cdb663 100644
--- a/p2p/BUILD.gn
+++ b/p2p/BUILD.gn
@@ -310,6 +310,8 @@
     "../rtc_base:socket_address",
     "../rtc_base:threading",
     "../rtc_base/system:rtc_export",
+    "../rtc_base/task_utils:pending_task_safety_flag",
+    "../rtc_base/task_utils:to_queued_task",
   ]
 }
 
diff --git a/p2p/stunprober/stun_prober.cc b/p2p/stunprober/stun_prober.cc
index 513097d..d85d5f2 100644
--- a/p2p/stunprober/stun_prober.cc
+++ b/p2p/stunprober/stun_prober.cc
@@ -24,6 +24,7 @@
 #include "rtc_base/constructor_magic.h"
 #include "rtc_base/helpers.h"
 #include "rtc_base/logging.h"
+#include "rtc_base/task_utils/to_queued_task.h"
 #include "rtc_base/thread.h"
 #include "rtc_base/time_utils.h"
 
@@ -261,6 +262,7 @@
       networks_(networks) {}
 
 StunProber::~StunProber() {
+  RTC_DCHECK(thread_checker_.IsCurrent());
   for (auto* req : requesters_) {
     if (req) {
       delete req;
@@ -357,8 +359,8 @@
 
   // Deletion of AsyncResolverInterface can't be done in OnResolveResult which
   // handles SignalDone.
-  invoker_.AsyncInvoke<void>(RTC_FROM_HERE, thread_,
-                             [resolver] { resolver->Destroy(false); });
+  thread_->PostTask(
+      webrtc::ToQueuedTask([resolver] { resolver->Destroy(false); }));
   servers_.pop_back();
 
   if (servers_.size()) {
@@ -451,12 +453,13 @@
 }
 
 void StunProber::MaybeScheduleStunRequests() {
-  RTC_DCHECK(thread_checker_.IsCurrent());
+  RTC_DCHECK_RUN_ON(thread_);
   int64_t now = rtc::TimeMillis();
 
   if (Done()) {
-    invoker_.AsyncInvokeDelayed<void>(
-        RTC_FROM_HERE, thread_, [this] { ReportOnFinished(SUCCESS); },
+    thread_->PostDelayedTask(
+        webrtc::ToQueuedTask(task_safety_.flag(),
+                             [this] { ReportOnFinished(SUCCESS); }),
         timeout_ms_);
     return;
   }
@@ -467,8 +470,9 @@
     }
     next_request_time_ms_ = now + interval_ms_;
   }
-  invoker_.AsyncInvokeDelayed<void>(
-      RTC_FROM_HERE, thread_, [this] { MaybeScheduleStunRequests(); },
+  thread_->PostDelayedTask(
+      webrtc::ToQueuedTask(task_safety_.flag(),
+                           [this] { MaybeScheduleStunRequests(); }),
       get_wake_up_interval_ms());
 }
 
diff --git a/p2p/stunprober/stun_prober.h b/p2p/stunprober/stun_prober.h
index 4153fd6..43d84ff 100644
--- a/p2p/stunprober/stun_prober.h
+++ b/p2p/stunprober/stun_prober.h
@@ -16,13 +16,13 @@
 #include <vector>
 
 #include "api/sequence_checker.h"
-#include "rtc_base/async_invoker.h"
 #include "rtc_base/byte_buffer.h"
 #include "rtc_base/constructor_magic.h"
 #include "rtc_base/ip_address.h"
 #include "rtc_base/network.h"
 #include "rtc_base/socket_address.h"
 #include "rtc_base/system/rtc_export.h"
+#include "rtc_base/task_utils/pending_task_safety_flag.h"
 #include "rtc_base/thread.h"
 
 namespace rtc {
@@ -233,8 +233,6 @@
   // This tracks how many of the sockets are ready.
   size_t total_ready_sockets_ = 0;
 
-  rtc::AsyncInvoker invoker_;
-
   Observer* observer_ = nullptr;
   // TODO(guoweis): Remove this once all dependencies move away from
   // AsyncCallback.
@@ -242,6 +240,8 @@
 
   rtc::NetworkManager::NetworkList networks_;
 
+  webrtc::ScopedTaskSafety task_safety_;
+
   RTC_DISALLOW_COPY_AND_ASSIGN(StunProber);
 };
 
