How can I call async code (written with Swift concurrency and async/await) from synchronous code

Generated on 8/6/2024

1 search

To call async code (written with Swift concurrency and async/await) from synchronous code, you can use the Task API to bridge between synchronous and asynchronous contexts. Here’s a basic example of how you can achieve this:

func synchronousFunction() {
    let semaphore = DispatchSemaphore(value: 0)
    
    Task {
        await asyncFunction()
        semaphore.signal()
    }
    
    semaphore.wait()
}

func asyncFunction() async {
    // Your async code here
}

In this example, synchronousFunction is a synchronous function that calls the asynchronous asyncFunction. It uses a DispatchSemaphore to wait for the asynchronous task to complete before continuing.

For more details on Swift concurrency and async/await, you can refer to the session A Swift Tour: Explore Swift’s features and design at WWDC 2024, which covers the basics of writing concurrent code in Swift, including tasks, async/await, and actors.