La bonne façon de gérer l'exception de la tâche continuewith

Veuillez consulter le code suivant-

static void Main(string[] args)
{
    //Get the task.
    var task = Task.Factory.StartNew<int>(() => { return div(32, 0); });

    //For error handling.
    task.ContinueWith(t => { Console.WriteLine(t.Exception.Message); }, 
        TaskContinuationOptions.OnlyOnFaulted);

    //If it succeeded.
    task.ContinueWith(t => { Console.WriteLine(t.Result); }, 
        TaskContinuationOptions.OnlyOnRanToCompletion);
    Console.ReadKey();
    Console.WriteLine("Hello");
}

private static int div(int x, int y)
{
    if (y == 0)
    {
        throw new ArgumentException("y");
    }
    return x / y;
}

Si j'exécute le code en mode release, La sortie est "Une ou plusieurs erreurs se sont produites" et une fois que j'ai frappé à la "touche " Entrée", "Bonjour" est également affiché. Si j'exécute le code en mode debug, la sortie est le même que le mode de libération. Mais lorsque le débogage dans l'IDE, UNE IDE de message d'exception ("une exception non Gérée dans le code de l'utilisateur" ) s'affiche lorsque la commande exécute la ligne de

throw new ArgumentException("y"); 

Si je continue à partir de là, le programme ne plante pas et affiche le même résultat que mode de diffusion. Est-ce la bonne façon de gérer exception?

  • Envisager de passer à async/await: Il est plus facile de syntaxe pour écrire et lire, especcially lors de la manipulation des exceptions.
  • vous souhaitez mettre à jour la question à vos exigences: VS2010 et .Net 4.0, comme vous l'avez fait ici.
InformationsquelleAutor Anirban Paul | 2014-02-03