Vorrei fare una richiesta a X diversi servizi Web che restituiranno ciascuno true
o false
.TPL attendere il completamento dell'attività con un valore di ritorno specifico
Queste attività devono essere eseguite in parallelo e mi piacerebbe attendere il primo che completa con un valore vero. Quando ricevo un valore reale, non desidero attendere il completamento degli altri compiti.
Nell'esempio sottostante, t1
non dovrebbe essere atteso dal t3
completa prima e restituisce 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);
In sostanza sto cercando Task.WhenAny
con un predicato, che ovviamente non esiste.
http://stackoverflow.com/questions/14726854/task-parallel-library-waitany-with-specified-result –
@AdamPlocher quella domanda è meno rilevante in un ambiente 'async-await'. – i3arnon
Sento una soluzione TPL DataFlow da qualche parte, vorrei avere il tempo di sedermi e giocarci! –