De la tâche.ContinueWith méthode nécessite tâche argument?

J'ai une classe avec deux méthodes Load() et(). Je veux être en mesure d'exécuter ces individuellement, comme les tâches en arrière-plan, ou en séquence. J'aime la ContinueWith() de la syntaxe, mais je ne suis pas en mesure de le faire fonctionner. Je dois prendre un paramètre de Tâche sur la méthode que j'ai continuer et ne peut pas avoir un paramètre de Tâche sur la méthode initiale.

Je voudrais le faire sans les expressions lambda, mais je suis coincé à l'aide d'eux, en forçant un paramètre de tâche sur l'une des méthodes, ou la création d'une troisième méthode LoadAndProcess()?

void Run()
{
    //doesn't work, but I'd like to do it
    //Task.Factory.StartNew(MethodNoArguments).ContinueWith(MethodNoArguments);

    Console.WriteLine("ContinueWith");
    Task.Factory.StartNew(MethodNoArguments).ContinueWith(MethodWithTaskArgument).Wait();

    Console.WriteLine("Lambda");
    Task.Factory.StartNew(() => { MethodNoArguments(); MethodNoArguments(); }).Wait();

    Console.WriteLine("ContinueWith Lambda");
    Task.Factory.StartNew(MethodNoArguments).ContinueWith(x => { 
            MethodNoArguments(); 
        }).Wait();
}

void MethodNoArguments()
{
    Console.WriteLine("MethodNoArguments()");
}

void MethodWithTaskArgument(Task t = null)
{
    Console.WriteLine("MethodWithTaskArgument()");
}
Pourriez-vous expliquer pourquoi vous ne voulez pas utiliser des expressions lambda?
Je n'ai pas de vraie raison autre que j'aime la syntaxe de ContinueWith et pense que l'expression lambda rend moins regarder de plus en plus sale et un peu plus difficile à comprendre.
Ne Load et Process dépendent les uns des autres, de manière séquentielle? Est des données partagées entre eux, où la synchronisation des threads pourrait être le problème?
Otoh, que, avez-vous envisagé d'écrire votre propre ContinueWith(this Task, Action) méthode d'extension?
Gardez à l'esprit également que la poursuite reçoit une Tâche en tant que paramètre de sorte qu'il peut faire la gestion des exceptions. Pour une approche qui combine à la fois la syntaxe que vous voulez et assure exceptions sont propagées à travers la séquence de tâches et ne vont pas non gérée, jetez un oeil à la Then méthode Stephen Toub construit dans ce post.

OriginalL'auteur Jason Goemaat | 2012-05-17