     /// - note: You can only cancel a task before it has started executing.
     @discardableResult
     @inlinable
-    public func flatScheduleTask<T>(deadline: NIODeadline,
-                                    file: StaticString = #file,
-                                    line: UInt = #line,
-                                    _ task: @escaping () throws -> EventLoopFuture<T>) -> Scheduled<T> {
+    @preconcurrency
+    public func flatScheduleTask<T>(
+        deadline: NIODeadline,
+        file: StaticString = #file,
+        line: UInt = #line,
+        _ task: @escaping @Sendable () throws -> EventLoopFuture<T>
+    ) -> Scheduled<T> {
+        self._flatScheduleTask(deadline: deadline, file: file, line: line, task)
+    }
+    @usableFromInline typealias FlatScheduleTaskDeadlineCallback<T> = () throws -> EventLoopFuture<T>
+    #else
+    /// Schedule a `task` that is executed by this `EventLoop` at the given time.
+    ///
+    /// - parameters:
+    ///     - task: The asynchronous task to run. As with everything that runs on the `EventLoop`, it must not block.
+    /// - returns: A `Scheduled` object which may be used to cancel the task if it has not yet run, or to wait
+    ///            on the full execution of the task, including its returned `EventLoopFuture`.
+    ///
+    /// - note: You can only cancel a task before it has started executing.
+    @discardableResult
+    @inlinable
+    public func flatScheduleTask<T>(
+        deadline: NIODeadline,
+        file: StaticString = #file,
+        line: UInt = #line,
+        _ task: @escaping () throws -> EventLoopFuture<T>
+    ) -> Scheduled<T> {
+        self._flatScheduleTask(deadline: deadline, file: file, line: line, task)
+    }
+    @usableFromInline typealias FlatScheduleTaskDeadlineCallback<T> = () throws -> EventLoopFuture<T>
+    #endif
+    
+    @discardableResult
+    @inlinable
+    func _flatScheduleTask<T>(
+        deadline: NIODeadline,
+        file: StaticString,
+        line: UInt,
+        _ task: @escaping FlatScheduleTaskDelayCallback<T>
+    ) -> Scheduled<T> {
         let promise: EventLoopPromise<T> = self.makePromise(file:#file, line: line)
         let scheduled = self.scheduleTask(deadline: deadline, task)
 

    ///     - task: The synchronous task to run. As everything that runs on the `EventLoop`, it must not block.
    /// - returns: An `EventLoopFuture` containing the result of `task`'s execution.
    @inlinable
    public func submit<T>(_ task: @escaping () throws -> T) -> EventLoopFuture<T> {
        let promise: EventLoopPromise<T> = makePromise(file: #file, line: #line)

        self.execute {

        return .init(promise: promise, cancellationTask: { scheduled.cancel() })
    }

    #if swift(>=5.7)
    /// Schedule a `task` that is executed by this `EventLoop` after the given amount of time.
    ///
    /// - parameters:
