Stephen Toub spiega questo bene in his blog post on the subject.
Parent and child tasks sono un po 'comuni quando si utilizza Task
s in modo parallelo. Si noti che quando un genitore Task
ha un figlio, la semantica di completamento del genitore cambia in modo subdolo.
Le attività padre/figlio non vengono quasi mai utilizzate quando si utilizza Task
s in modo async
. Nel mondo async
, si ha una sorta di "relazione genitore/figlio logica" quando un metodo async
ne chiama un altro, ma non viene effettivamente implementato utilizzando attività padre/figlio.
In genere un Task
destinato per l'uso nel codice async
non si prevede che la semantica di completamento venga modificata da un'attività secondaria ad essa allegata. Pertanto, il nuovo valore predefinito per Task.Run
è DenyChildAttach
, che impedisce a qualsiasi attività figlio di tentare di collegarsi.
fonte
2013-05-11 19:45:22