Je suis en train de recréer les conditions qui causeront cette exception:Comment provoquer AggregateException avec TPL?
System.AggregateException: A Task's exception(s) were not observed
either by Waiting on the Task or accessing its Exception property.
As a result, the unobserved exception was rethrown by the finalizer thread.`
J'ai écrit cette pensée de programme je fais l'exception, mais il ne fonctionne pas:
using System;
using System.Threading.Tasks;
namespace SomeAsyncStuff
{
class Program
{
static void Main(string[] args)
{
Task.Factory.StartNew(() => { throw new NullReferenceException("ex"); });
GC.Collect();
Console.WriteLine("completed");
}
}
}
Dans mon application réelle , J'utilise TPL et je n'ai pas codé ma gestion des exceptions correctement. En conséquence, j'ai cette exception. Maintenant j'essaye de recréer les mêmes conditions dans un programme séparé pour expérimenter des exceptions non observées.
Ceci n'est pas le code * correct * pour recréer l'exception. Appeler aléatoirement Thread.Sleep est une mauvaise pratique. Windows lui-même n'est pas un système d'exploitation en temps réel, donc l'utilisation de contraintes de temps sur les tâches est vouée à l'échec à un moment donné. Voir ma réponse pour une manière correcte de reproduire l'erreur. – scripni
Comme j'ai écrit à John Wigger, utiliser task.Wait() ne reproduit pas ce que j'avais besoin de reproduire à l'époque (voir les commentaires dans sa réponse). Ma solution n'est pas quelque chose que l'on mettrait dans le code de production; J'essayais juste de recréer un bug intermittent que j'avais en production. Je pense que ma réponse est la meilleure façon de simuler ce qui s'est passé dans mon environnement de production. – Sylvain