System.CommandLine está atualmente em PREVIEW, e esta documentação é para a versão 2.0 beta 4.
Algumas informações estão relacionadas ao produto de pré-lançamento que pode ser substancialmente modificado antes de ser lançado. A Microsoft não faz garantias, de forma expressa ou implícita, em relação à informação aqui apresentada.
Para lidar com a terminação, injete uma CancellationToken instância no código do manipulador. Esse token pode ser passado para APIs assíncronas que você chama de dentro do manipulador, conforme mostrado no exemplo a seguir:
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;
}
}
O código anterior usa uma SetHandler sobrecarga que obtém uma instância InvocationContext em vez de um ou mais IValueDescriptor<T> objetos. O InvocationContext é usado para obter os CancellationToken objetos e ParseResult . ParseResult pode fornecer valores de argumento ou opção.
Para testar o código de exemplo, execute o comando com uma URL que levará um momento para carregar e, antes de terminar o carregamento, pressione Ctrl+C. No macOS, pressione Command+Period(.). Por exemplo:
A origem deste conteúdo pode ser encontrada no GitHub, onde também pode criar e rever problemas e pedidos Pull. Para mais informações, consulte o nosso guia do contribuidor.
Comentários do .NET
O .NET é um projeto código aberto. Selecione um link para fornecer comentários:
Este módulo explora o uso de exceções e o processo de tratamento de exceções em aplicativos de console C#. As atividades práticas fornecem experiência na implementação de padrões de tratamento de exceções para vários cenários de codificação.