The Concurrency module provides comprehensive concurrency and parallelism capabilities for Soul, including goroutines, channels, mutexes, wait groups, promises, and other synchronization primitives for building concurrent applications.
Run a function in a goroutine without waiting for results:
Copy
Ask AI
// Fire-and-forget executionConcurrency.run(soul() { println("Background task running") // Do some work})// Continue with other work immediatelyprintln("Main thread continues")
timeout = Concurrency.createTimeout(10000)// Cancel the timeouttimeout.cancel()// Check if timeout is doneif (timeout.isDone()) { println("Timeout was cancelled")}
// Good - proper resource cleanupsoul properResourceManagement() { mutex = Concurrency.createMutex() soul safeOperation() { mutex.lock() try { // Do work return "success" } finally { mutex.unlock() } } return safeOperation()}// Good - timeout for operationssoul timeoutOperation() { timeout = Concurrency.createTimeout(5000) promise = timeout.execute(soul() { // Potentially long operation Concurrency.sleep(3000) return "completed" }) try { result = await promise return result } catch (error) { println("Operation timed out") return null }}// Good - error handling in concurrent codesoul robustConcurrency() { promises = [] for (i = 0; i < 3; i++) { promise = Concurrency.spawn(soul(id) { if (Math.random() > 0.5) { throw "Random error in task " + id } return "Task " + id + " success" }, i) promises.push(promise) } // Handle each promise individually for (promise in promises) { try { result = await promise println("Success: " + result) } catch (error) { println("Error: " + error.message) } }}
The Concurrency module provides powerful tools for building concurrent and parallel applications in Soul, enabling efficient resource utilization and responsive program behavior.