TaskCompletionSource.SetResult(...)
zaten çağrılmışsa TaskCompletionSource.Task
ContinueWith(...)
yöntemini kullanmak güvenli midir? task.ContinueWith
ayarlanır önce WebClient.DownloadStringCompleted
olay zaten ateş eğerBir TaskCompletionSource.Task üzerinde ContinueWith yöntemini çağırmak güvenli midir (bunun için .SetResult denir)?
// this was written inside the question box, please excuse any silly errors and lack of error checking (I'm not near VS right now)...
private WebClient _webClient = new WebClient();
public Task<string> GetExamplePage() {
var tcs = new TaskCompletionSource<string>();
web.DownloadStringCompleted += (s, ea) => tcs.SetResult(ea.Result);
web.DownloadStringAsync(new URI(@"http://www.example.com/example.html"));
return tcs.task;
}
public void ProcessExamplePage() {
var task = GetExamplePage();
Thread.Sleep(1000);
task.ContinueWith(t => Console.WriteLine(t.Result)); // *line in question*
}
Console.WriteLine(...)
yürütmek Will:
Bu temel kod umarım soruyu çerçeveye yardımcı olacak?
MSDN bunu söylemek (Task.ContinueWith) sahiptir:
Task.ContinueWith Yöntem
akım görev tamamlanana kadar Görev o koşma nedeniyle tamamlar, ister yürütülmesi için planlanan olmayacaktır döndütamamlanmadı, işlenemeyen bir istisna nedeniyle hata oluştu, ya da iptal edilmek üzere erken çıkılıyordu .
Bu yöntem çağrılırsa ve görev zaten tamamlanmışsa ne yazık ki bu durum söz konusu değildir.
Sağladığınız bilgiler için şimdiden teşekkür ederiz! Evet
Bu, yeni bir zaman uyumsuz işlem başlatır mı yoksa bu yalnızca eşzamanlı olarak devam edecek mi? "TaskCompletionSource" işlevi eşzamansız bir işlem başlatmadı. – annemartijn
Güzel. Bununla ilgili belgelere bir gönderme yapmak harika olurdu. –
@annemartijn Özgün görevin (veya sürdürmenin) TaskCreationOptions öğelerini belirleyip belirlemediğine bağlıdır. Çalıştırma DenetimleriAsenkronize olarak (veya GörevKontinguationOptions. Sürekliliği Eşzamansız Olarak Çalıştır) - bunlar yalnızca * süreklilikleri * için geçerlidir - - ve/veya devamın “TaskContinuationOptions” ifadesini belirleyip belirlemediğini (ExecuteSynchronously) (bu, devam eden bir durum için geçerlidir). –