feat: add DBOS skills for TypeScript, Python, and Go (#94)
Add three DBOS SDK skills with reference documentation for building reliable, fault-tolerant applications with durable workflows. Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
64
skills/dbos-golang/references/workflow-background.md
Normal file
64
skills/dbos-golang/references/workflow-background.md
Normal file
@@ -0,0 +1,64 @@
|
||||
---
|
||||
title: Start Workflows in Background
|
||||
impact: CRITICAL
|
||||
impactDescription: Background workflows enable reliable async processing
|
||||
tags: workflow, background, handle, async
|
||||
---
|
||||
|
||||
## Start Workflows in Background
|
||||
|
||||
Use `dbos.RunWorkflow` to start a workflow and get a handle to track it. The workflow is guaranteed to run to completion even if the app is interrupted.
|
||||
|
||||
**Incorrect (no way to track background work):**
|
||||
|
||||
```go
|
||||
func processData(ctx dbos.DBOSContext, data string) (string, error) {
|
||||
// ...
|
||||
return "processed: " + data, nil
|
||||
}
|
||||
|
||||
// Fire and forget in a goroutine - no durability, no tracking
|
||||
go func() {
|
||||
processData(ctx, data)
|
||||
}()
|
||||
```
|
||||
|
||||
**Correct (using RunWorkflow):**
|
||||
|
||||
```go
|
||||
func processData(ctx dbos.DBOSContext, data string) (string, error) {
|
||||
return "processed: " + data, nil
|
||||
}
|
||||
|
||||
func main() {
|
||||
// ... setup and launch ...
|
||||
|
||||
// Start workflow, get handle
|
||||
handle, err := dbos.RunWorkflow(ctx, processData, "input")
|
||||
if err != nil {
|
||||
log.Fatal(err)
|
||||
}
|
||||
|
||||
// Get the workflow ID
|
||||
fmt.Println(handle.GetWorkflowID())
|
||||
|
||||
// Wait for result
|
||||
result, err := handle.GetResult()
|
||||
|
||||
// Check status
|
||||
status, err := handle.GetStatus()
|
||||
}
|
||||
```
|
||||
|
||||
Retrieve a handle later by workflow ID:
|
||||
|
||||
```go
|
||||
handle, err := dbos.RetrieveWorkflow[string](ctx, workflowID)
|
||||
result, err := handle.GetResult()
|
||||
```
|
||||
|
||||
`GetResult` supports options:
|
||||
- `dbos.WithHandleTimeout(timeout)`: Return a timeout error if the workflow doesn't complete within the duration
|
||||
- `dbos.WithHandlePollingInterval(interval)`: Control how often the database is polled for completion
|
||||
|
||||
Reference: [Workflows](https://docs.dbos.dev/golang/tutorials/workflow-tutorial)
|
||||
Reference in New Issue
Block a user