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.