Partager via


Guide pratique pour gérer l’arrêt dans System.CommandLine

Important

System.CommandLine est actuellement une PRÉVERSION et cette documentation concerne la version 2.0 beta 4. Certaines informations portent sur la préversion du produit qui est susceptible d’être en grande partie modifiée avant sa publication. Microsoft exclut toute garantie, expresse ou implicite, concernant les informations fournies ici.

Pour gérer l’arrêt, injectez une instance de CancellationToken dans le code de votre gestionnaire. Ce jeton peut ensuite être passé aux API asynchrones que vous appelez à partir de votre gestionnaire, comme le montre l’exemple suivant :

static async Task<int> Main(string[] args)
{
    int returnCode = 0;

    var urlOption = new Option<string>("--url", "A URL.");

    var rootCommand = new RootCommand("Handle termination example");
    rootCommand.Add(urlOption);

    rootCommand.SetHandler(async (context) =>
        {
            string? urlOptionValue = context.ParseResult.GetValueForOption(urlOption);
            var token = context.GetCancellationToken();
            returnCode = await DoRootCommand(urlOptionValue, token);
        });

    await rootCommand.InvokeAsync(args);

    return returnCode;
}

public static async Task<int> DoRootCommand(
    string? urlOptionValue, CancellationToken cancellationToken)
{
    try
    {
        using (var httpClient = new HttpClient())
        {
            await httpClient.GetAsync(urlOptionValue, cancellationToken);
        }
        return 0;
    }
    catch (OperationCanceledException)
    {
        Console.Error.WriteLine("The operation was aborted");
        return 1;
    }
}

Le code précédent utilise une surcharge de SetHandler qui obtient une instance de InvocationContext à la place d’un ou de plusieurs objets IValueDescriptor<T>. InvocationContext est utilisé pour obtenir les objets CancellationToken et ParseResult. ParseResult peut fournir des valeurs d’argument ou d’option.

Pour tester l’exemple de code, exécutez la commande avec une URL. Avant la fin du chargement qui prend quelques instants, appuyez sur Ctrl+C. Sur macOS, appuyez sur Commande+Point (.). Par exemple :

testapp --url https://learn.microsoft.com/aspnet/core/fundamentals/minimal-apis
The operation was aborted

Vous pouvez également ajouter directement des actions d’annulation à l’aide de la méthode CancellationToken.Register.

Pour plus d’informations sur une autre façon de définir le code de sortie du processus, consultez Définir des codes de sortie.

Voir aussi

Vue d’ensemble de System.CommandLine