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>
1.7 KiB
1.7 KiB
title, impact, impactDescription, tags
| title | impact | impactDescription | tags |
|---|---|---|---|
| Debounce Workflows to Prevent Wasted Work | MEDIUM | Prevents redundant workflow executions during rapid triggers | pattern, debounce, delay, efficiency |
Debounce Workflows to Prevent Wasted Work
Use dbos.NewDebouncer to delay workflow execution until some time has passed since the last trigger. This prevents wasted work when a workflow is triggered multiple times in quick succession.
Incorrect (executing on every trigger):
// Every keystroke triggers a new workflow - wasteful!
func onInputChange(ctx dbos.DBOSContext, userInput string) {
dbos.RunWorkflow(ctx, processInput, userInput)
}
Correct (using Debouncer):
// Create debouncer before Launch()
debouncer := dbos.NewDebouncer(ctx, processInput,
dbos.WithDebouncerTimeout(120*time.Second), // Max wait: 2 minutes
)
func onInputChange(ctx dbos.DBOSContext, userID, userInput string) error {
// Delays execution by 60 seconds from the last call
// Uses the LAST set of inputs when finally executing
_, err := debouncer.Debounce(ctx, userID, 60*time.Second, userInput)
return err
}
Key behaviors:
- First argument to
Debounceis the debounce key, grouping executions together (e.g., per user) - Second argument is the delay duration from the last call
WithDebouncerTimeoutsets a max wait time since the first trigger- When the workflow finally executes, it uses the last set of inputs
- After execution begins, the next
Debouncecall starts a new cycle - Debouncers must be created before
Launch()
Type signature: Debouncer[P any, R any] — the type parameters match the target workflow.
Reference: Debouncing Workflows