Zum Inhalt

Action Queues + Concurrency

Wenn Actions sich gegenseitig im Weg stehen oder gleichzeitig laufen sollen — die Queue-Konfiguration entscheidet.

Doku: https://docs.streamer.bot/guide/core/actions

Konzepte

Begriff Bedeutung
Queue Warteschlange für Action-Ausführung
Non-Blocking Actions starten sofort, parallel zueinander
Blocking Actions warten bis die vorherige fertig ist
Concurrent (CC) Sub-Actions INNERHALB einer Action laufen parallel statt sequentiell
Always Run Action läuft auch wenn Queue pausiert

Standard-Queue vs Custom Queues

Default-Queue: "Non-Blocking" — alle Actions starten sofort. Was passt für 90% der Fälle.

Custom Queues in SB anlegen: 1. Action-Editor → Settings → Queue → Dropdown öffnen → + Create Queue 2. Name, Typ (Blocking/Non-Blocking), Concurrent-Settings

Wann Blocking Queue nutzen

Use-Case A: Alert-Pipeline

Bei Sub/Bits sollen Alerts NICHT überlappen — ein Alert fertig, dann nächster.

Alle Alert-Actions (Sub-Alert, Bits-Alert, Follow-Alert) → Queue: "Alerts"
Queue-Typ: Blocking

Wenn jetzt 3 Subs gleichzeitig kommen: erste Alert läuft, zweite wartet, dritte wartet. Sauber.

Use-Case B: OBS Source-Toggle-Sequenzen

OBS-Source-Show → Delay → Hide. Wenn parallel laufen würde, hidet die Action vorzeitig.

Source-Toggle-Action → Queue: "OBS Effects"
Typ: Blocking

Use-Case C: Heart-Rate-Updates

HR pulsed 1× pro Sekunde. Wenn jedes Update eine schwere Action triggert (OBS, Discord, TTS), Backlog wächst.

Lösung: separate Queue für HR mit Blocking + Single-Concurrency. Wenn vorherige noch nicht fertig, neue wird verworfen oder geskip't (je nach Queue-Config).

Action Concurrent (CC)

Standard: Sub-Actions laufen sequentiell (oben nach unten, eine nach der anderen).

Mit Concurrent = ✅ (im Action-Editor): alle Sub-Actions starten gleichzeitig. Reihenfolge nicht garantiert.

Use-Case: wenn Sub-Actions unabhängig sind und Speed wichtig ist:

[Cmd] !clip
├── 1. Create Clip       (3s)
├── 2. Get User Info     (1s) — unabhängig von 1
├── 3. Get Stream Info   (1s) — unabhängig von 1
└── 4. (Send Message basiert auf allen drei)

Sequentiell: 3+1+1 = 5s. Concurrent: max(3,1,1) = 3s.

Vorsicht: wenn Sub-Action 4 die Outputs von 1+2+3 braucht, KANN nicht concurrent sein. Concurrent ist für unabhängige Parallel-Calls.

Always Run

Bei Queue-Pause normalerweise wird die Queue verlassen. Mit Always Run = ✅ ignoriert die Action den Pause-Status.

Use-Case: Notfall-Commands wie !ban müssen IMMER laufen, auch wenn alle anderen Actions gerade pausiert.

Queue pausieren

Sub-Action: Core → Action Queues → Set Action Queue Pause State

Feld Wert
Queue (welche)
State Paused / Resumed / Toggle

Use-Case: bei Stream-Pause alle Effekt-Actions pausieren:

[Cmd] !pause-effects
└── Set Action Queue Pause State: Queue = "Alerts", State = Paused

Effekte laufen nicht mehr bis du [Cmd] !resume-effects ausführst.

Empfehlung: Queue-Layout

Pragmatisches Queue-Schema für AzaCraft-Stream:

Queue Typ Was rein
Default Non-Blocking Chat-Commands, einfache Antworten
Alerts Blocking Sub/Bits/Raid/Gift-Alerts mit Sound/OBS
OBS Effects Blocking Source-Visibility-Show-Delay-Hide-Sequenzen
HR Updates Blocking + Single-Concurrent Heart-Rate-Pulse Actions
TTS Blocking Speaker.bot-Sub-Actions (verhindert Audio-Overlap)

Häufige Fallen

  • Default-Queue für alles — Alert-Sequenzen überlappen, Visuals brechen. Lösung: separate Blocking-Queue für Alerts
  • Concurrent ungewollt — Sub-Actions die voneinander abhängen brechen. Default lassen (sequentiell)
  • Queue voll — wenn Trigger schneller feuert als Action durchläuft (z.B. HR-Updates), Backlog wächst ewig. Queue mit kurzem Timeout oder Drop-Old einstellen
  • Always Run zu großzügig — bei pausierter Queue laufen Actions die du STOP wolltest. Selektiv setzen

Pro-Tipp: Sub-Action Group als Mini-Concurrent

Statt ganze Action concurrent zu machen — eine Group innerhalb der Action. Group als Concurrent → nur die Sub-Actions in der Group parallel, Rest bleibt sequentiell.

[Action]
├── 1. (sequentiell)
├── 2. (sequentiell)
├── Group [Concurrent]:    ← diese laufen parallel
│   ├── Send Message
│   ├── Discord Webhook
│   └── Play Sound
└── 3. (sequentiell, wartet auf alle Group-Subs)

Quellen