Sdílet prostřednictvím


Jak zpracovat ukončení v System.CommandLine

Důležité

System.CommandLine je aktuálně ve verzi PREVIEW a tato dokumentace je určená pro verzi 2.0 beta 4. Některé informace se týkají předběžné verze produktu, který může být podstatně změněn před vydáním. Microsoft neposkytuje žádné záruky, výslovné ani předpokládané, týkající se zde uváděných informací.

Pokud chcete zpracovat ukončení, vložte CancellationToken instanci do kódu obslužné rutiny. Tento token se pak dá předat asynchronním rozhraním API, která voláte z obslužné rutiny, jak je znázorněno v následujícím příkladu:

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

Předchozí kód používá SetHandler přetížení, které získá InvocationContext instance místo jednoho nebo více IValueDescriptor<T> objektů. Slouží InvocationContext k získání CancellationToken objektů a ParseResult . ParseResult může zadat hodnoty argumentu nebo možnosti.

Pokud chcete ukázkový kód otestovat, spusťte příkaz s adresou URL, která chvíli načte a než se dokončí načítání, stiskněte ctrl +C. V systému macOS stiskněte command +Period(.). Příklad:

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

Akce zrušení lze také přidat přímo pomocí CancellationToken.Register metody.

Informace o alternativním způsobu nastavení ukončovacího kódu procesu naleznete v tématu Nastavení ukončovací kódy.

Viz také

System.CommandLine Přehled