When building resilient applications, you often need to perform multiple operations in parallel to improve performance and user experience. Restate provides durable concurrency primitives that allow you to run tasks concurrently while maintaining deterministic execution during replays.Documentation Index
Fetch the complete documentation index at: https://docs.restate.dev/llms.txt
Use this file to discover all available pages before exploring further.
When to use concurrent tasks
Use concurrent tasks when you need to:- Call multiple external services simultaneously (e.g., fetching data from different APIs)
- Race multiple operations and use the first result (e.g., trying multiple LLM providers)
- Implement timeouts by racing an operation against a timer
- Perform batch operations where individual tasks can run in parallel
Key benefits
- Deterministic replay: Restate logs the order of completion, ensuring consistent behavior during failures
- Fault tolerance: If your handler fails, tasks that were already completed will be replayed with their results, while pending tasks will be retried
Parallelizing tasks
Start multiple durable operations concurrently by calling them without immediately awaiting:Retrieving results
Restate provides several patterns for coordinating concurrent tasks. All patterns useRestatePromise combinators that log the order of completion, ensuring deterministic behavior during replays.
Wait for all tasks to complete
Similar toPromise.all, waits for all promises to resolve successfully:
Wait for the first successful completion
Similar toPromise.any, returns the first promise that resolves successfully:
Wait for the first to complete
Similar toPromise.race, returns the first promise to settle (resolve or reject):
Wait for all to settle
Similar toPromise.allSettled, waits for all promises to complete regardless of success or failure:
Creating already-completed promises
You can createRestatePromise instances that are already resolved or rejected, mirroring Promise.resolve and Promise.reject:
RestatePromise.
Detecting RestatePromises
UseisRestatePromise to check whether a value is a RestatePromise before using it with combinators like RestatePromise.all():