diff --git a/src/core/lib/security/credentials/fake/fake_credentials.c b/src/core/lib/security/credentials/fake/fake_credentials.c
index 51cafd986fb89f6196e4d01d123786c4f2d48956..c569259f1bb894658b5dc2436b1c44aef3dcf111 100644
--- a/src/core/lib/security/credentials/fake/fake_credentials.c
+++ b/src/core/lib/security/credentials/fake/fake_credentials.c
@@ -113,9 +113,12 @@ static void md_only_test_get_request_metadata(
   if (c->is_async) {
     grpc_credentials_metadata_request *cb_arg =
         grpc_credentials_metadata_request_create(creds, cb, user_data);
-    grpc_executor_push(
-        grpc_closure_create(on_simulated_token_fetch_done, cb_arg),
-        GRPC_ERROR_NONE);
+    grpc_timer_init(exec_ctx, &c->timer,
+                    gpr_time_add(gpr_now(GPR_CLOCK_MONOTONIC),
+                                 gpr_time_from_micros(10, GPR_TIMESPAN)),
+                    on_simulated_token_fetch_done, cb_arg,
+                    gpr_now(GPR_CLOCK_MONOTONIC));
+
   } else {
     cb(exec_ctx, user_data, c->md_store->entries, 1, GRPC_CREDENTIALS_OK, NULL);
   }
diff --git a/src/core/lib/security/credentials/fake/fake_credentials.h b/src/core/lib/security/credentials/fake/fake_credentials.h
index 9cf38084a3df3fdddfa785b1d649d6fef33aee10..15e5cd5e576e6f5e7b555657063c73ba425b2d7d 100644
--- a/src/core/lib/security/credentials/fake/fake_credentials.h
+++ b/src/core/lib/security/credentials/fake/fake_credentials.h
@@ -34,6 +34,7 @@
 #ifndef GRPC_CORE_LIB_SECURITY_CREDENTIALS_FAKE_FAKE_CREDENTIALS_H
 #define GRPC_CORE_LIB_SECURITY_CREDENTIALS_FAKE_FAKE_CREDENTIALS_H
 
+#include "src/core/lib/iomgr/timer.h"
 #include "src/core/lib/security/credentials/credentials.h"
 
 /* -- Fake transport security credentials. -- */
@@ -50,6 +51,7 @@ grpc_server_credentials *grpc_fake_transport_security_server_credentials_create(
 typedef struct {
   grpc_call_credentials base;
   grpc_credentials_md_store *md_store;
+  grpc_timer timer;
   int is_async;
 } grpc_md_only_test_credentials;