Il TPL ha un numero di valori TaskContinuationOptions
che controllano le circostanze in cui viene eseguita l'attività. Ad esempio, TaskContinuationOptions.NotOnCanceled
impedisce l'esecuzione di un'attività quando il genitore viene annullato.Perché il TPL non supporta continuazioni multi-task filtrate dallo stato?
Tuttavia, nessuno di questi filtri dello stato delle attività si applica alle continuazioni di più attività. Non si può fare qualcosa di simile:
TaskFactory f = new TaskFactory();
Task t1 = new Task (() => Thread.Sleep (5000));
Task t2 = new Task (() => Thread.Sleep (4000));
Task t3 = f.ContinueWhenAll (new Task[] { t1, t2 },
(tasks) => { ... },
TaskContinuationOptions.OnlyOnRanToCompletion);
si finisce per ottenere un errore che dice, "It is invalid to exclude specific continuation kinds for continuations off of multiple tasks."
Quello che non capisco è il motivo per cui questa condizione sarebbe stato escluso dalla API. Perché non dovrebbe essere un caso d'uso perfettamente valido voler eseguire un'attività solo quando tutti gli antecedenti terminano in uno stato particolare?