diff --git a/rtc_base/task_utils/repeating_task.cc b/rtc_base/task_utils/repeating_task.cc
index 0cc9a62..cdabf2f 100644
--- a/rtc_base/task_utils/repeating_task.cc
+++ b/rtc_base/task_utils/repeating_task.cc
@@ -54,38 +54,16 @@
   next_run_time_ = Timestamp::PlusInfinity();
 }
 
-void RepeatingTaskBase::PostStop() {
-  if (task_queue_->IsCurrent()) {
-    RTC_DLOG(LS_INFO) << "Using PostStop() from the task queue running the "
-                         "repeated task. Consider calling Stop() instead.";
-  }
-  task_queue_->PostTask(ToQueuedTask([this] {
-    RTC_DCHECK_RUN_ON(task_queue_);
-    Stop();
-  }));
-}
-
 }  // namespace webrtc_repeating_task_impl
-RepeatingTaskHandle::RepeatingTaskHandle() {
-  sequence_checker_.Detach();
-}
-RepeatingTaskHandle::~RepeatingTaskHandle() {
-  sequence_checker_.Detach();
-}
 
 RepeatingTaskHandle::RepeatingTaskHandle(RepeatingTaskHandle&& other)
     : repeating_task_(other.repeating_task_) {
-  RTC_DCHECK_RUN_ON(&sequence_checker_);
   other.repeating_task_ = nullptr;
 }
 
 RepeatingTaskHandle& RepeatingTaskHandle::operator=(
     RepeatingTaskHandle&& other) {
-  RTC_DCHECK_RUN_ON(&other.sequence_checker_);
-  {
-    RTC_DCHECK_RUN_ON(&sequence_checker_);
-    repeating_task_ = other.repeating_task_;
-  }
+  repeating_task_ = other.repeating_task_;
   other.repeating_task_ = nullptr;
   return *this;
 }
@@ -95,7 +73,6 @@
     : repeating_task_(repeating_task) {}
 
 void RepeatingTaskHandle::Stop() {
-  RTC_DCHECK_RUN_ON(&sequence_checker_);
   if (repeating_task_) {
     RTC_DCHECK_RUN_ON(repeating_task_->task_queue_);
     repeating_task_->Stop();
@@ -103,16 +80,7 @@
   }
 }
 
-void RepeatingTaskHandle::PostStop() {
-  RTC_DCHECK_RUN_ON(&sequence_checker_);
-  if (repeating_task_) {
-    repeating_task_->PostStop();
-    repeating_task_ = nullptr;
-  }
-}
-
 bool RepeatingTaskHandle::Running() const {
-  RTC_DCHECK_RUN_ON(&sequence_checker_);
   return repeating_task_ != nullptr;
 }
 
diff --git a/rtc_base/task_utils/repeating_task.h b/rtc_base/task_utils/repeating_task.h
index eaf2a4b..21ec130 100644
--- a/rtc_base/task_utils/repeating_task.h
+++ b/rtc_base/task_utils/repeating_task.h
@@ -38,7 +38,6 @@
 
   bool Run() final;
   void Stop() RTC_RUN_ON(task_queue_);
-  void PostStop();
 
   TaskQueueBase* const task_queue_;
   // This is always finite, except for the special case where it's PlusInfinity
@@ -77,8 +76,8 @@
 // not thread safe.
 class RepeatingTaskHandle {
  public:
-  RepeatingTaskHandle();
-  ~RepeatingTaskHandle();
+  RepeatingTaskHandle() = default;
+  ~RepeatingTaskHandle() = default;
   RepeatingTaskHandle(RepeatingTaskHandle&& other);
   RepeatingTaskHandle& operator=(RepeatingTaskHandle&& other);
   RepeatingTaskHandle(const RepeatingTaskHandle&) = delete;
@@ -122,11 +121,6 @@
   // closure itself.
   void Stop();
 
-  // Stops future invocations of the repeating task closure. The closure might
-  // still be running when PostStop() returns, but there will be no future
-  // invocation.
-  void PostStop();
-
   // Returns true if Start() or DelayedStart() was called most recently. Returns
   // false initially and if Stop() or PostStop() was called most recently.
   bool Running() const;
@@ -134,10 +128,8 @@
  private:
   explicit RepeatingTaskHandle(
       webrtc_repeating_task_impl::RepeatingTaskBase* repeating_task);
-  rtc::SequencedTaskChecker sequence_checker_;
   // Owned by the task queue.
-  webrtc_repeating_task_impl::RepeatingTaskBase* repeating_task_
-      RTC_GUARDED_BY(sequence_checker_) = nullptr;
+  webrtc_repeating_task_impl::RepeatingTaskBase* repeating_task_ = nullptr;
 };
 
 }  // namespace webrtc
diff --git a/rtc_base/task_utils/repeating_task_unittest.cc b/rtc_base/task_utils/repeating_task_unittest.cc
index 6f8e7fa..74261df 100644
--- a/rtc_base/task_utils/repeating_task_unittest.cc
+++ b/rtc_base/task_utils/repeating_task_unittest.cc
@@ -60,6 +60,18 @@
  private:
   MockClosure* mock_;
 };
+
+// Helper closure class to stop repeating task on a task queue. This is
+// equivalent to [handle{move(handle)}] { handle.Stop(); } in c++14.
+class TaskHandleStopper {
+ public:
+  explicit TaskHandleStopper(RepeatingTaskHandle handle)
+      : handle_(std::move(handle)) {}
+  void operator()() { handle_.Stop(); }
+
+ private:
+  RepeatingTaskHandle handle_;
+};
 }  // namespace
 
 TEST(RepeatingTaskTest, TaskIsStoppedOnStop) {
@@ -79,7 +91,7 @@
   Sleep(kShortInterval * (kShortIntervalCount + kMargin));
   EXPECT_EQ(counter.load(), kShortIntervalCount);
 
-  handle.PostStop();
+  task_queue.PostTask(TaskHandleStopper(std::move(handle)));
   // Sleep long enough that the task would run at least once more if not
   // stopped.
   Sleep(kLongInterval * 2);
@@ -132,7 +144,7 @@
   TaskQueueForTest task_queue("queue");
   auto handle = RepeatingTaskHandle::DelayedStart(
       task_queue.Get(), TimeDelta::ms(100), MoveOnlyClosure(&mock));
-  handle.PostStop();
+  task_queue.PostTask(TaskHandleStopper(std::move(handle)));
   EXPECT_TRUE(done.Wait(kTimeout.ms()));
 }
 
@@ -144,7 +156,7 @@
   TaskQueueForTest task_queue("queue");
   auto handle =
       RepeatingTaskHandle::Start(task_queue.Get(), MoveOnlyClosure(&mock));
-  handle.PostStop();
+  task_queue.PostTask(TaskHandleStopper(std::move(handle)));
   EXPECT_TRUE(done.Wait(kTimeout.ms()));
 }
 
@@ -211,9 +223,9 @@
   RepeatingTaskHandle handle;
   object->StartPeriodicTask(&handle, task_queue.Get());
   // Restart the task
-  handle.PostStop();
+  task_queue.PostTask(TaskHandleStopper(std::move(handle)));
   object->StartPeriodicTask(&handle, task_queue.Get());
-  handle.PostStop();
+  task_queue.PostTask(TaskHandleStopper(std::move(handle)));
   struct Destructor {
     void operator()() { object.reset(); }
     std::unique_ptr<ObjectOnTaskQueue> object;
