Skip to main content

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.

Workflow output mapping

Workflow 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 id ve status bilgisi 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ıttaki ack href'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 ve fallbackTimeoutSeconds penceresi 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'larsync=false
Mobile/Web client (long-polling kabiliyeti var)sync=false
Backend-to-backend integration (request/response pattern)sync=true

İlgili