diff --git a/library/alloc/src/task.rs b/library/alloc/src/task.rs
index 5edc579605669..4d32d3f120e8b 100644
--- a/library/alloc/src/task.rs
+++ b/library/alloc/src/task.rs
@@ -87,3 +87,13 @@ fn raw_waker<W: Wake + Send + Sync + 'static>(waker: Arc<W>) -> RawWaker {
         &RawWakerVTable::new(clone_waker::<W>, wake::<W>, wake_by_ref::<W>, drop_waker::<W>),
     )
 }
+
+impl<F: Fn() + Send + Sync + 'static> Wake for F {
+    fn wake(self: Arc<Self>) {
+        (self)();
+    }
+
+    fn wake_by_ref(self: &Arc<Self>) {
+        (self)();
+    }
+}