Vornehmen der Beendigung in System.CommandLine
Wichtig
System.CommandLine
befindet sich derzeit in der VORSCHAU, und diese Dokumentation gilt für Version 2.0 Beta 4.
Einige Informationen beziehen sich auf Vorabversionen des Produkts, die vor dem Release ggf. grundlegend überarbeitet werden. Microsoft übernimmt hinsichtlich der hier bereitgestellten Informationen keine Gewährleistungen, seien sie ausdrücklich oder konkludent.
Um die Beendigung vorzunehmen, müssen Sie eine CancellationToken-Instanz in Ihren Handlercode einfügen. Dieses Token kann dann an asynchrone API übergeben werden, die Sie in Ihrem Handler aufrufen, wie im folgenden Beispiel gezeigt:
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;
}
}
Der vorangehende Code verwendet eine SetHandler
-Überladung, die eine InvocationContext-Instanz anstelle eines oder mehrerer IValueDescriptor<T>
-Objekte abruft. Wird InvocationContext
verwendet, um die CancellationToken
- und ParseResult-Objekte abzurufen. ParseResult
kann Argument- oder Optionswerte bereitstellen.
Um den Beispielcode zu testen, führen Sie den Befehl mit einer URL aus, die etwas Zeit zum Laden braucht. Drücken Sie STRG+C, bevor der Ladevorgang abgeschlossen ist. Drücken Sie unter macOS Command+. (Punkt). Beispiel:
testapp --url https://learn.microsoft.com/aspnet/core/fundamentals/minimal-apis
The operation was aborted
Abbruchaktionen können auch direkt mit der CancellationToken.Register-Methode hinzugefügt werden.
Informationen zu einer alternativen Möglichkeit zum Festlegen des Prozessausgangscodes finden Sie unter Festlegen von Exitcodes.