Structure_Concurrency5.9.0
CheckedContinuation
A mechanism to interface between synchronous and asynchronous code, logging correctness violations.
- iOS
- 13.0+
- macOS
- 10.15+
- tvOS
- 13.0+
- watchOS
- 6.0+
struct CheckedContinuation<T, E> where E : Error
A continuation is an opaque representation of program state. To create a continuation in asynchronous code, call the withUnsafeContinuation(function:_:)
or withUnsafeThrowingContinuation(function:_:)
function. To resume the asynchronous task, call the resume(returning:)
, resume(throwing:)
, resume(with:)
, or resume()
method.
Resuming from a continuation more than once is undefined behavior. Never resuming leaves the task in a suspended state indefinitely, and leaks any associated resources. CheckedContinuation
logs a message if either of these invariants is violated.
CheckedContinuation
performs runtime checks for missing or multiple resume operations. UnsafeContinuation
avoids enforcing these invariants at runtime because it aims to be a low-overhead mechanism for interfacing Swift tasks with event loops, delegate methods, callbacks, and other non-async
scheduling mechanisms. However, during development, the ability to verify that the invariants are being upheld in testing is important. Because both types have the same interface, you can replace one with the other in most circumstances, without making other changes.
Citizens in _Concurrency
Conformances
protocol Sendable
A type whose values can safely be passed across concurrency domains by copying.
Members
init(continuation: UnsafeContinuation<T, E>, function: String
) Creates a checked continuation from an unsafe continuation.
func resume(returning: T
) Resume the task awaiting the continuation by having it return normally from its suspension point.
func resume(throwing: E
) Resume the task awaiting the continuation by having it throw an error from its suspension point.
Citizens in _Concurrency
where E:Error
Members
func resume(
) Resume the task awaiting the continuation by having it return normally from its suspension point.
func resume(with: Result<T, E>
) Resume the task awaiting the continuation by having it either return normally or throw an error based on the state of the given
Result
value.func resume<Er>(with: Result<T, Er>
) Resume the task awaiting the continuation by having it either return normally or throw an error based on the state of the given
Result
value.