2011-01-31 9 views
7

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?

risposta

0

"... per l'esecuzione solo quando tutti gli antecedenti si è conclusa in un particolare stato ..."

Nota la tua parola 'tutti', io non sono la SM, ma scommetto che ha a che fare con il fatto che fosse necessario un altro intero enum TaskContinuationOptions che includesse All, Any, OnlyOne, AllButOne e così via e così via.

Inoltre, Eric Lippert è sempre rispondere alle domande come queste con "è costoso e richiede tempo per aggiungere una 'caratteristica semplice'. Way dà fastidio solo, di ottenere il diritto di base e consentendo agli utenti di implementare il resto.

0

ContinueWhenAll mezzi "eseguire la continuazione quando tutte le attività sono state completate correttamente." Specificare NotOn* o sarebbe contrario o superfluo a tale definizione.Vedere la sezione commenti di this MSDN article.

Problemi correlati