Dela via


Hantera avslutning i System.CommandLine

Viktigt!

System.CommandLine är för närvarande i förhandsversion och den här dokumentationen är för version 2.0 beta 4. Viss information gäller förhandsversionsprodukt som kan ändras avsevärt innan den släpps. Microsoft lämnar inga garantier, uttryckliga eller underförstådda, avseende informationen som visas här.

Om du vill hantera avslutningen matar du in en CancellationToken instans i din hanteringskod. Den här token kan sedan skickas vidare till asynkrona API:er som du anropar inifrån hanteraren, som du ser i följande exempel:

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

Föregående kod använder en SetHandler överlagring som hämtar en InvocationContext-instans i stället för ett eller flera IValueDescriptor<T> objekt. InvocationContext Används för att hämta objekten CancellationToken och ParseResult. ParseResult kan ange argument- eller alternativvärden.

Testa exempelkoden genom att köra kommandot med en URL som tar en stund att läsa in och tryck på Ctrl+C innan inläsningen är klar. På macOS trycker du på Kommandoperiod+(.). Till exempel:

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

Annulleringsåtgärder kan också läggas till direkt med hjälp av CancellationToken.Register metoden.

Information om ett alternativt sätt att ange processens slutkod finns i Ange slutkoder.

Se även

System.CommandLine Översikt