@mastra/core
Version:
Mastra is a framework for building AI-powered applications and agents with a modern TypeScript stack.
73 lines (48 loc) • 2.92 kB
Markdown
# Run.startAsync()
The `.startAsync()` method starts a workflow run without waiting for completion. It returns immediately with the `runId`, allowing the workflow to execute in the background. This is useful for long-running workflows, scheduled tasks, or when you want to avoid blocking on workflow completion.
## Usage example
```typescript
const run = await workflow.createRun()
// Fire-and-forget - returns immediately
const { runId } = await run.startAsync({
inputData: {
value: 'initial data',
},
})
// Optionally poll for completion later
const result = await workflow.getWorkflowRunExecutionResult(runId)
```
## Parameters
**inputData** (`z.infer<TInput>`): Input data that matches the workflow's input schema
**requestContext** (`RequestContext`): Request Context data to use during workflow execution
**initialState** (`z.infer<TState>`): Initial state to use for the workflow execution
**tracingOptions** (`TracingOptions`): Options for Tracing configuration.
**tracingOptions.metadata** (`Record<string, any>`): Metadata to add to the root trace span. Useful for adding custom attributes like user IDs, session IDs, or feature flags.
**tracingOptions.traceId** (`string`): Trace ID to use for this execution (1-32 hexadecimal characters). If provided, this trace will be part of the specified trace.
**outputOptions** (`OutputOptions`): Options for output configuration.
**outputOptions.includeState** (`boolean`): Whether to include the workflow run state in the result.
## Returns
**runId** (`string`): The unique identifier for this workflow run. Use this to check status or retrieve results later.
## When to use `startAsync()`
Use `startAsync()` instead of `start()` when:
- **Long-running workflows**: The workflow may take minutes or hours to complete
- **Scheduled/cron triggers**: You want to trigger a workflow without blocking the scheduler
- **Avoiding polling failures**: With Inngest workflows, `start()` polls for completion which can fail and cause retries. `startAsync()` avoids this issue
- **Background processing**: You want to queue work and handle results asynchronously
## Checking workflow status
After calling `startAsync()`, you can check the workflow status using:
```typescript
// Get the execution result (including step outputs)
const result = await workflow.getWorkflowRunExecutionResult(runId)
if (result?.status === 'success') {
console.log('Workflow completed:', result.steps)
} else if (result?.status === 'failed') {
console.log('Workflow failed:', result.error)
} else if (result?.status === 'running') {
console.log('Workflow still running...')
}
```
## Related
- [Run.start()](https://mastra.ai/reference/workflows/run-methods/start): Start a workflow and wait for completion
- [Workflows overview](https://mastra.ai/docs/workflows/overview)
- [Workflow.createRun()](https://mastra.ai/reference/workflows/workflow-methods/create-run)