Created
September 9, 2021 09:30
-
-
Save icanzilb/04a67c729e5ca82d06ed72b1555ae472 to your computer and use it in GitHub Desktop.
Task.sleep(seconds:)
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
extension Task where Success == Never, Failure == Never { | |
/// Suspends the current task for at least the given duration in seconds. | |
/// Throws if the task is cancelled while suspended. | |
/// - Parameter seconds: The sleep duration in seconds. | |
static func sleep(seconds: TimeInterval) async throws { | |
try await Task.sleep(nanoseconds: UInt64(seconds * 1_000_000_000)) | |
} | |
} |
@maxhumber an honest question: why is confusing to you that the function throws?
Failure == Never
?
Obviously we can just do this:
try? await Task.sleep(nanoseconds: 4_000_000_000)
But the try?
is kinda blahhh
@maxhumber it's up to you to decide if you want to handle errors or ignore them with try?
. If you use try?
— you're blocking the mechanism Swift uses to cancel asynchronous tasks, you can read more about it in the documentation in the "Task Cancellation" section https://developer.apple.com/documentation/swift/task#3925721
Why not make the method throwing ?
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Awesome! Thanks.
That the default
.sleep
func throws is confusing to me... so I simplified my implementation to:This way I'm able to call without
try
: