Chciałbym zwrócić się do X różnych serwisów internetowych, z których każda zwróci true
lub false
.TPL oczekiwanie na zakończenie zadania z określoną wartością zwrotną.
Te zadania powinny być wykonywane równolegle i chciałbym poczekać na pierwszą, która zakończy z prawdziwą wartością. Kiedy otrzymam prawdziwą wartość, nie chcę czekać na wykonanie innych zadań.
W poniższym przykładzie t1
nie powinno być oczekiwany od t3
kończy pierwszy i zwraca true
:
var t1 = Task.Run<bool>(() =>
{
Thread.Sleep(5000);
Console.WriteLine("Task 1 Excecuted");
return true;
}, cts.Token);
var t2 = Task.Run<bool>(() =>
{
Console.WriteLine("Task 2 Executed");
return false;
}, cts.Token);
var t3 = Task.Run<bool>(() =>
{
Thread.Sleep(2000);
Console.WriteLine("Task 3 Executed");
return true;
}, cts.Token);
Zasadniczo szukam Task.WhenAny
z orzecznika, który oczywiście nie istnieje.
http://stackoverflow.com/questions/14726854/task-parallel-library-waitany-with-specified-result –
@AdamPlocher to pytanie jest mniej istotne w środowisku "oczekującym na awans". – i3arnon
Wyczuwam gdzieś tutaj rozwiązanie TPL DataFlow, chciałbym mieć czas, aby usiąść i pobawić się nim! –