Delen via


Beëindiging afhandelen in System.CommandLine

Belangrijk

System.CommandLine bevindt zich momenteel in PREVIEW en deze documentatie is voor versie 2.0 beta 4. Sommige informatie heeft betrekking op voorlopige versie van het product dat aanzienlijk kan worden gewijzigd voordat het wordt vrijgegeven. Microsoft biedt geen enkele expliciete of impliciete garanties met betrekking tot de informatie die hier wordt verstrekt.

Als u beëindiging wilt afhandelen, injecteert u een CancellationToken exemplaar in uw handlercode. Dit token kan vervolgens worden doorgegeven aan asynchrone API's die u vanuit uw handler aanroept, zoals wordt weergegeven in het volgende voorbeeld:

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;
    }
}

De voorgaande code maakt gebruik van een SetHandler overbelasting die een Exemplaar van InvocationContext ophaalt in plaats van een of meer IValueDescriptor<T> objecten. Het InvocationContext wordt gebruikt om de CancellationToken objecten en ParseResult-objecten op te halen. ParseResult kan argument- of optiewaarden opgeven.

Als u de voorbeeldcode wilt testen, voert u de opdracht uit met een URL die even duurt voordat het laden is voltooid, drukt u op Ctrl+C. Druk op macOS op Command+Period(.). Voorbeeld:

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

Annuleringsacties kunnen ook rechtstreeks worden toegevoegd met behulp van de CancellationToken.Register methode.

Zie Afsluitcodes instellen voor informatie over een alternatieve manier om de afsluitcode voor processen in te stellen.

Zie ook

System.CommandLine Overzicht