Jak obsługiwać zakończenie w programie System.CommandLine
Ważne
System.CommandLine
jest obecnie dostępna w wersji zapoznawczej, a ta dokumentacja dotyczy wersji 2.0 beta 4.
Niektóre informacje odnoszą się do produktu w wersji wstępnej, który może zostać znacząco zmodyfikowany przed jego wydaniem. Firma Microsoft nie udziela żadnych gwarancji, jawnych lub domniemanych, w odniesieniu do informacji podanych w tym miejscu.
Aby obsłużyć zakończenie, należy wstrzyknąć CancellationToken wystąpienie do kodu procedury obsługi. Ten token można następnie przekazać do asynchronicznych interfejsów API wywoływanych z poziomu programu obsługi, jak pokazano w poniższym przykładzie:
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;
}
}
Powyższy kod używa SetHandler
przeciążenia, które pobiera wystąpienie InvocationContext , a nie co najmniej jeden IValueDescriptor<T>
obiekt. Element InvocationContext
służy do pobierania CancellationToken
obiektów i ParseResult . ParseResult
może podać wartości argumentu lub opcji.
Aby przetestować przykładowy kod, uruchom polecenie z adresem URL, który potrwa chwilę, a przed zakończeniem ładowania naciśnij klawisze Ctrl+C. W systemie macOS naciśnij klawisz Command+Period(.). Na przykład:
testapp --url https://learn.microsoft.com/aspnet/core/fundamentals/minimal-apis
The operation was aborted
Akcje anulowania można również dodać bezpośrednio przy użyciu CancellationToken.Register metody .
Aby uzyskać informacje na temat alternatywnego sposobu ustawiania kodu zakończenia procesu, zobacz Ustawianie kodów zakończenia.