L'observation des Tâches d'exceptions dans un ContinueWith

Il y a différentes manières d'observer les exceptions levées dans les tâches. L'un d'eux est dans un ContinueWith avec OnlyOnFaulted:

var task = Task.Factory.StartNew(() =>
{
    //Throws an exception 
    //(possibly from within another task spawned from within this task)
});

var failureTask = task.ContinueWith((t) =>
{
    //Flatten and loop (since there could have been multiple tasks)
    foreach (var ex in t.Exception.Flatten().InnerExceptions)
        Console.WriteLine(ex.Message);
}, TaskContinuationOptions.OnlyOnFaulted);

Ma question: les exceptions deviennent automatiquement observée une failureTask commence ou s'ils ne deviennent observé une fois que je 'touch' ex.Message?

Qu'entendez-vous par observée? Votre ContinueWith délégué ne sera appelée qu'une seule fois, si c'est ce que tu veux dire, indépendamment du fait que vous accédez à l'objet de l'exception ou pas.
Peut-être qu'il signifie "renvoyer l'exception, si j'ai simplement appeler OnlyOnFaulted indépendamment de l'accès t.Exceptions"?
Si vous n'avez pas "d'observer" des exceptions (c'est la terminologie Microsoft) lancés à partir des Tâches, puis le garbage collector de les jeter pour vous à un moment plus tard. Mon ContinueWith délégué sûrement pourrait être appelé plusieurs fois (si plusieurs tâches à partir de l'intérieur de ma tâche principale lancer des exceptions)... ou il pourrait être appelé avec un AggregateException arbre avec toutes les exceptions lancées?
"Juste de la planification d'une poursuite hors de t1 n'est pas suffisante pour observer son exception... vous avez besoin d'examiner l'exception d'une certaine façon, soit par Attendre avec sur elle de sorte que l'exception est levée, ou d'accéder à sa propriété Exception après que la tâche a reproché, etc.". Ok, donc j'ai en fait besoin de regarder à l'Exception de l'observer. Source: social.msdn.microsoft.com/Forums/en-US/parallelextensions/...

OriginalL'auteur davenewza | 2012-07-31