Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
.NET'te bir iş akışı çalıştırılırken yürütme modu, süpersteps'lerin nasıl işlendiğini ve olayların tüketiciye nasıl teslim edildiğini kontrol eder.
InProcessExecution sınıfı iki yürütme modunu kullanıma sunar: OffThread ve Lockstep.
Genel bakış
| OffThread (Varsayılan) | Eşzamanlılık | |
|---|---|---|
| Süper adım yürütme | Arka plan iş parçacığı | Tüketicinin iş parçacığı |
| Olay teslimi | Anında, olaylar tetiklenirken | Her üst adım tamamlandıktan sonra toplu işlendi |
| Adım yürütme | Etkinlik işleme sürecinden bağımsız | Toplu işlenmiş olaylar tüketilene kadar duraklatıldı |
| Eşzamanlılık | Süpersteps çalışırken tüketici olayları okur | Tüketici ve süper adım yürütmesi dönüşümlü olarak gerçekleşir. |
| En uygun | Gerçek zamanlı akış, üretim senaryoları | Test, hata ayıklama, belirlenimci sıralama |
OffThread
OffThread varsayılan yürütme modudur. Supersteps bir arka plan iş parçacığında çalıştırılır ve olaylar kanal tabanlı bir uygulama aracılığıyla oluşturulurken hemen akışa alınır.
// OffThread is the default — these are equivalent:
await using StreamingRun run = await InProcessExecution.RunStreamingAsync(workflow, input);
await using StreamingRun run = await InProcessExecution.OffThread.RunStreamingAsync(workflow, input);
Nasıl çalışır?
- Bir arka plan görevi, iletiler beklemedeyken sürekli olarak süper adımlar çalıştırır.
- Yürütücüler çıkışlar veya olaylar verdikçe, elde edilen
WorkflowEventnesneler sınırsızChannel<WorkflowEvent>üzerine yazılır. - Tüketici,
WatchStreamAsyncile kanaldan olayları okur ve bunları üretildikçe gerçek zamanlı olarak alır. - Tüm üst işlemler tamamlandığında ve hiçbir ileti kalmadığında, çalıştırma bir
IdleveyaPendingRequestsdurumuyla durur.
Üst adım döngüsü ve tüketici eşzamanlı olarak çalıştığından, olaylar tetiklenir tetiklenmez görünür; arabelleğe alma gecikmesi olmaz. Bu, OffThread'i bir kullanıcı arabiriminde belirteçlere göre belirteç güncelleştirmelerini görüntüleme gibi düşük gecikme süreli olay tesliminin önemli olduğu akış senaryoları için ideal hale getirir.
Eşzamanlı çalıştırmalar
OffThread, birden çok çalıştırmanın aynı iş akışı örneğini aynı anda paylaşmasına olanak tanıyan eşzamanlı bir değişkeni de destekler:
await using StreamingRun run = await InProcessExecution.Concurrent.RunStreamingAsync(workflow, input);
Önemli
Eşzamanlı yürütme, iş akışındaki tüm yürütücülerin oluşturucu içerisinde bildirilmesi veya üretim yöntemleri olarak sağlanmasını gerektirir.
Eşzamanlılık
Kilit modunda, süper adımlar bir arka plan görevi yerine tüketicinin iş parçacığında çalışır. Olaylar her üst adım sırasında birikir ve üst adım tamamlandıktan sonra toplu iş olarak yayılır.
await using StreamingRun run = await InProcessExecution.Lockstep.RunStreamingAsync(workflow, input);
Nasıl çalışır?
- Tüketici, yürütme döngüsünü yönlendiren öğesini çağırır
WatchStreamAsync. - Bir üst adım tamamlanmaya kadar çalışır ve olaylar bir kuyrukta birikir.
- Üst adım tamamlandıktan sonra, kuyruğa alınan tüm olaylar tüketiciye iletilebilir.
- Sonraki süper adım, tüketici öncekinden tüm olayları aldıktan sonra ancak başlar.
Bu değişen düzen, tüketicinin ve iş akışı altyapısının hiçbir zaman aynı anda çalışmayamayacağı anlamına gelir. Olay teslimi belirleyicidir; bir üst adımdaki tüm olayların bir sonraki üst adımdaki herhangi bir olaydan önce gelmesi garanti edilir.
Lockstep ne zaman kullanılır?
Lockstep şu durumlarda kullanışlıdır:
- Test — belirlenimci olay sıralama, onaylamaları basitleştirir.
- Hata ayıklama — Yürütme tüketicinin iş parçacığında kaldığında adım adım hata ayıklama daha kolaydır.
- Sıralı işleme — bir üst adım başlamadan önce bir üst adımın olaylarını tam olarak işlemeniz gereken senaryolar.
Yürütme Modu Seçme
Çoğu üretim senaryosu için varsayılan OffThread modu önerilir. En iyi yanıt hızını sağlar ve tüketici olayları işlerken iş akışının işlemeye devam etmesini sağlar.
Birim testlerinde veya hata ayıklama oturumlarında olduğu gibi belirleyici davranış performanstan daha önemli olduğunda Lockstep kullanın.
// Production: OffThread (default)
await using StreamingRun run = await InProcessExecution.RunStreamingAsync(workflow, input);
// Testing: Lockstep for deterministic behavior
await using StreamingRun run = await InProcessExecution.Lockstep.RunStreamingAsync(workflow, input);
Akışsız Yürütme
Her iki çalışma modu da RunAsync aracılığıyla akışsız yürütmeyi destekler. Akış dışı modda iş akışı tamamlanmak üzere çalıştırılır ve tüm olayları artımlı olarak akışla aktarmak yerine bir Run nesnede toplar:
Run run = await InProcessExecution.RunAsync(workflow, input);
// Access all emitted events
foreach (WorkflowEvent evt in run.OutgoingEvents)
{
// Process events
}
Akışsız yürütme tamamlandıktan sonra tüm olayları topladığı için, OffThread'in gerçek zamanlı olay teslim avantajı geçerli değildir. Akış dışı senaryolardaki modlar arasındaki birincil fark iş parçacığı yönetimidir: OffThread, arka plan iş parçacığında süper adımları çalıştırarak tamamlanmasını beklerken çağıran iş parçacığını serbest bırakır, Lockstep ise çağıranın iş parçacığında süper adımları çalıştırarak, iş akışı bitene kadar bu süreci engeller.
Akışsız yürütme varsayılan OffThread modunu kullanır. Lockstep'i akışsız yürütmeyle kullanmak için:
Run run = await InProcessExecution.Lockstep.RunAsync(workflow, input);
Sonraki Adımlar
Yürütme modları Python iş akışları için geçerli değildir. Python iş akışları, zaman uyumsuz bir oluşturucu aracılığıyla üst işlem ve olay teslimi işleyen tek bir yürütme modeli kullanır. Bu model .NET Lockstep moduna benzer; tüketici oluşturucudan etkin bir şekilde olay çekmediği sürece adımlar ilerlemez.
Python iş akışlarını çalıştırma hakkında bilgi için bkz. İş Akışı Oluşturucusu ve Yürütme.
Go'da bir iş akışı çalıştırırken, yürütme ortamı superstep’lerin nasıl işlendiğini ve olayların tüketiciye nasıl iletildiğini kontrol eder. Paket workflow/inproc üç ortamı kullanıma sunar: Default/OffThread, Lockstepve .Concurrent
Genel bakış
| OffThread / Varsayılan | Eşzamanlılık | Eş zamanlı | |
|---|---|---|---|
| Süper adım yürütme | Arka planda çalışan goroutine | Olay tüketicisi tarafından yönlendirilir | Arka plan goroutine |
| Olay teslimi | Anında, olaylar tetiklenirken | Akış tüketildikçe toplu hâle getirilir | Anında, olaylar tetiklenirken |
| En uygun | Gerçek zamanlı akış, üretim senaryoları | Test, hata ayıklama, belirlenimci sıralama | Eşzamanlı güvenli bağlamalarla paylaşılan iş akışı örnekleri |
OffThread
OffThread varsayılan yürütme modudur. Bunlar eşdeğerdir:
stream, err := inproc.Default.RunStreaming(ctx, wf, input)
stream, err := inproc.OffThread.RunStreaming(ctx, wf, input)
Nasıl çalışır?
- Arka plan goroutine'i, iletiler beklemedeyken süper adımları çalıştırır.
- Yürütücüler çıktılar veya olaylar ürettikçe, iş akışı olayları akışa yazılır.
- Tüketici, olayları
WatchStreamile okur ve bunları üretildikçe alır. - Tüm üst işlemler tamamlandığında ve hiçbir ileti kalmadığında, çalıştırma boşta veya beklemede-istek durumuyla durur.
Eşzamanlı çalıştırmalar
İş akışındaki tüm yürütücü bağlamaları eşzamanlı paylaşılan yürütmeyi desteklediğinde kullanın inproc.Concurrent :
stream, err := inproc.Concurrent.RunStreaming(ctx, wf, input)
if err != nil {
return err
}
defer stream.Close(ctx)
Eşzamanlılık
Lockstep modunda, tüketici akıştan okudukça iş akışı yürütülmesi ilerler. Bu, test ve hata ayıklama için olay sıralamasını belirleyici hale getirir.
stream, err := inproc.Lockstep.RunStreaming(ctx, wf, input)
if err != nil {
return err
}
defer stream.Close(ctx)
for evt, err := range stream.WatchStream(ctx) {
if err != nil {
return err
}
// inspect event
}
Nasıl çalışır?
- Tüketici, yürütme döngüsünü yönlendiren öğesini çağırır
WatchStream. - Bir süper adım tamamlanana kadar yürütülür ve olaylar biriktirilir.
- Birikmiş olaylar tüketiciye teslim edilir.
- Sonraki süper adım ancak tüketici önceki üst adımın olaylarını aldıktan sonra başlar.
Lockstep ne zaman kullanılır?
Birim testleri, hata ayıklama veya sonraki üst adım başlamadan önce bir üst adımın olaylarını tam olarak işlemek istediğiniz senaryolar gibi belirleyici davranış düşük gecikme süreli akıştan daha önemli olduğunda Lockstep kullanın.
Yürütme Modu Seçme
Çoğu üretim senaryosunda inproc.Default veya inproc.OffThread kullanın. Testlerde olduğu gibi, belirleyici olay sıralamanın akış gecikme süresinden daha önemli olduğu durumlarda kullanın inproc.Lockstep . Yalnızca iş akışındaki her bağlama eşzamanlı paylaşılan yürütmeyi desteklediğinde kullanın inproc.Concurrent .
// Production: OffThread (default)
stream, err := inproc.Default.RunStreaming(ctx, wf, input)
if err != nil {
return err
}
defer stream.Close(ctx)
// Testing: Lockstep for deterministic behavior
testStream, err := inproc.Lockstep.RunStreaming(ctx, wf, input)
if err != nil {
return err
}
defer testStream.Close(ctx)
Akışsız Yürütme
Tüm yürütme ortamları, bir sonraki durma noktasına kadar çalışan ve üretilen olayları döndürülen çalıştırmada depolayan akışsız Run özelliğini de destekler.
run, err := inproc.Default.Run(ctx, wf, input)
if err != nil {
return err
}
for evt := range run.NewEvents() {
if output, ok := evt.(workflow.OutputEvent); ok {
fmt.Printf("Final result: %v\n", output.Output)
}
}