Comment faire pour annuler une tâche et de lever une exception sans appel IsCancellationRequested ou ThrowIfCancellationRequested

J'ai créer 2 tâches. Task1 exécute une longue calculs (SingleLongMethod), Task2 a annuler Task1 dans le milieu de l'calculs.

La solution que j'ai trouvé est de les appeler token.ThrowIfCancellationRequested() ou token.IsCancellationRequested.

La question est: puis-je lancer une Exception dans le Task1, automatiquement après l'appel de token.Cancel() dans Task2 à plusieurs reprises sans appel de token.ThrowIfCancellationRequested()?

static void Main(string[] args)
{
    Task.Factory.StartNew(() =>
    {
        token.Register(() => 
        {
            //throw new Exception("Help!");
        });

        SingleLongMethod();
    });

    Task.Factory.StartNew(() =>
    {
        StopMethod();
    });

    Console.ReadKey();
}

private static void SingleLongMethod()
{
    try
    {
        for (int i = 0; i < 20; i++)
        {
            Console.WriteLine("Test pcb");
            Thread.Sleep(1000);
            //token.ThrowIfCancellationRequested();
        }
    }
    catch (Exception exc)
    {
        Console.WriteLine("I was stopped!");
    }
    finally
    {
        Console.WriteLine("End!");
    }
}
private static void StopMethod()
{
    try
    {
        for (int i = 0; i < 30; i++)
        {
            if (i == 5)
                tokenSource.Cancel();

            Console.WriteLine("Monitoring state");
            Thread.Sleep(1000);
        }
    }
    catch (Exception)
    {
        throw new Exception("Help!");
    }
}

J'ai essayé de le lancer et d'exception, l'inscription de rappels mais ça n'a pas fonctionné.

+1
2019-09-17 10:23:13
source
1 réponses

J'ai trouvé ce fusionné PR: https://github.com/facebook/docusaurus/pull/704


La réponse est à mettre:

*yourPageName*.title = "Your Desired Titile";

juste au-dessus de l' module.exports à la fin de la s/p>

+0
2019-09-17 10:54:13

Voir d'autres questions sur les étiquettes