diff --git a/src/core/lib/iomgr/combiner.c b/src/core/lib/iomgr/combiner.c
index eb476c057292c0df756dd89ddb06dc2ab294ea7d..25b2ec3d4c5eff38a95451d5c8ccf543c6194f77 100644
--- a/src/core/lib/iomgr/combiner.c
+++ b/src/core/lib/iomgr/combiner.c
@@ -155,11 +155,12 @@ static bool start_execute_final(grpc_exec_ctx *exec_ctx, grpc_combiner *lock) {
       gpr_log(GPR_DEBUG,
               "C:%p start_execute_final take_async_break_before_final_list=%d",
               lock, lock->take_async_break_before_final_list));
-  if (lock->take_async_break_before_final_list) {
+  if (lock->optional_workqueue != NULL &&
+      lock->take_async_break_before_final_list) {
     grpc_closure_init(&lock->continue_finishing, continue_executing_final,
                       lock);
-    grpc_exec_ctx_sched(exec_ctx, &lock->continue_finishing, GRPC_ERROR_NONE,
-                        GRPC_WORKQUEUE_REF(lock->optional_workqueue, "sched"));
+    grpc_workqueue_enqueue(exec_ctx, lock->optional_workqueue,
+                           &lock->continue_finishing, GRPC_ERROR_NONE);
     GPR_TIMER_END("combiner.start_execute_final", 0);
     return false;
   } else {