Async / Sync Yöntemi
Instance veya transition çalıştırma istekleri sync query parameter'ı alır. Bu parametre, çalışma biçimini ve client'a dönen response'un içeriğini değiştirir.
sync=true — Senkron
İstek senkron çalışır:
- vNext işlemi tamamlanana kadar bekler
- Response'da işlem sonucu veri ile birlikte döner
- Client tek bir HTTP çağrısı ile sonucu alır
- Long-running işlemler için timeout riski vardır
Örnek:
POST /api/v1/{domain}/workflows/{wf}/instances/start?sync=true
Response: instance ID + güncel state + tüm output data.
output mappingWorkflow tanımında attributes.output tanımlıysa, sync=true yanıtı standart zarf yerine doğrudan output script'in ürettiği gövde olur — script'in belirlediği status code ve header'lar ile. Flow böylece kendi API sözleşmesini şekillendirebilir. Subflow instance'ları hariçtir.
sync=false (default) — Asenkron
İstek asenkron çalışır:
- vNext sadece isteği kabul eder ve hemen response döner
- Response'da
idvestatusbilgisi vardır - İşlem arka planda işlenir
- Client sonucu öğrenmek için State Function üzerinden long-polling yapar
Örnek:
POST /api/v1/{domain}/workflows/{wf}/instances/start
Response: 202 Accepted + { "id": "...", "status": { "code": "InProgress" } } — işleme başlandığını gösterir.
:::info 202 Accepted
Asenkron (sync=false) start ve transition istekleri başarı durumunda artık 200 yerine 202 Accepted döner — iş tamamlanmamış, durable arkaplan işlemesi için kuyruğa alınmıştır. sync=true istekler, hata sonuçları ve custom output-response yolu değişmemiştir.
:::
Sonra client GET /api/v1/{domain}/workflows/{wf}/instances/{id}/functions/state ile long-polling yapar; status.code = "A" (Active) olduğunda mevcut state'e geçilmiştir.
Deklaratif long-poll sonlandırma (interaction.longPoll)
Bir state, açık tutulan long-poll isteğinin ne zaman sonlandırılacağını interaction.longPoll ile deklaratif olarak tanımlayabilir. Runtime, isteği bir transition gerçekleşene veya fallbackTimeoutSeconds dolana kadar açık tutar; terminate ise state'ten çıkıldığında isteğin kapatılıp kapatılmayacağını belirler. Böylece her client kendi long-poll sonlandırma mantığını uygulamak yerine, durak noktalarını süreç tasarımından okur. Tanım ve örnek için bkz. Workflow → State Interaction (Long Poll).
State Function yanıtındaki interaction objesi, state'te interaction.longPoll tanımlıysa terminate değerinden bağımsız her zaman döner:
"interaction": {
"terminateLongPoll": false,
"fallbackTimeoutSeconds": 600
}
terminateLongPoll: true→ client long-poll'u sonlandırır, girilen state'in ekranını render eder ve yanıttakiackhref'i ile acknowledge gönderir; süre içinde ack gelmezse zamanlanmış fallback pipeline'ı otomatik devam ettirir.terminateLongPoll: false→ client, instance durumundan bağımsız olarak durmuş bir long-poll isteği varsa yeniden başlatır vefallbackTimeoutSecondspenceresi boyunca denemeye devam eder.
Continuation işletimi (durable)
Asenkron continuation'lar dayanıklılık için kuyruğa alınabilir: continuation doğrudan Dapr üzerinden enqueue edilir, bu yol kullanılamadığında transactional outbox fallback devreye girer. Bu, sağlıklı koşullarda gecikmeyi azaltırken dayanıklılık garantisini korur.
Karar
| Ne zaman? | Tercih |
|---|---|
| Hızlı, deterministic süreçler (validation, hesaplama) | sync=true |
| Uzun süren süreçler, dış API çağrıları, human task'lar | sync=false |
| Mobile/Web client (long-polling kabiliyeti var) | sync=false |
| Backend-to-backend integration (request/response pattern) | sync=true |
İlgili
- User Integration — async + view loop akışı
- Instance Data — instance lifecycle
- Built-in Functions — State function
- Workflow → State Interaction (Long Poll) — deklaratif long-poll sonlandırma