ı Görev nesneleri oluşturmak ki (ben kontrol etmediğini) iki bağımsız zaman uyumsuz işlevleri var diyelim:Bağımsız C# görevleri nasıl zincirlenir?
Task A();
Task B();
ve diğer bazı zaman uyumsuz olmayan fonksiyonunu tek bir inşa nasıl
void X();
Bunların tümünü sırayla yürüten ve daha fazla sürekliliğin (X'den sonra uygulanacak olan) eklenmesini sağlayan görev zinciri.
Eğer bunu yaparsam: B Yeni Görev zincirini başlayacak çünkü, çalışmıyor
Task Sequential()
{
return A()
.ContinueWith(t => { B(); })
.ContinueWith(t => { X(); });
}
. Eğer B'nin tamamlanması uzun zaman alırsa, önce X idam edilecektir (Sıralı Arayanın arayıcısı ne olursa olsun, İade Edilen Görev ile devam edebilir). B Görevini emsali olarak tek bir Görev zincirinde son öğe olmak için X'e ihtiyacım var.
Eğer bunu yaparsam:.
Arayan Sıralı() ContinueWith yaparsa halde A, B ve X şimdi, sırayla çalıştırır çünkü sadece kısmen, sorunu çözerTask Sequential()
{
return A()
.ContinueWith(t => { B().ContinueWith(t => { X(); }); });
}
, sürdürülmesinin B ve X'e paralel olarak yürütecektir, X.
Alex'in cevabı gitmek isteyeyim yoludur. Ancak sizin amaçlarınız için, yapmaya çalıştığınız şey bir sözün kullanılmasını gerektirecektir ('TaskCompletionSource 'hizmet vermektedir). –
'Task.WaitAll (A(), B()) .We (t => X())' 'a' ve 'B' bağımsız olduğunu söylerseniz, bir seçenek değil mi? – VMAtm
@VMAtm, 'Task.WhenAll' demek istiyorsunuz. –