System.CommandLine에서 종료를 처리하는 방법
Important
System.CommandLine
는 현재 미리 보기로 제공되며 이 설명서는 버전 2.0 베타 4용입니다.
일부 정보는 릴리스되기 전에 상당 부분 수정될 수 있는 시험판 제품과 관련이 있습니다. Microsoft는 여기에 제공된 정보에 대해 어떠한 명시적이거나 묵시적인 보증도 하지 않습니다.
종료를 처리하려면 처리기 코드에 CancellationToken 인스턴스를 삽입합니다. 이 토큰은 다음 예제와 같이 처리기 내에서 호출하는 비동기 API에 전달될 수 있습니다.
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;
}
}
앞의 코드는 하나 이상의 SetHandler
개체가 아닌 InvocationContext인스턴스를 가져오는 IValueDescriptor<T>
오버로드를 사용합니다. InvocationContext
(은)는 CancellationToken
및 ParseResult개체를 가져오는 데 사용됩니다. ParseResult
(은)는 인수 또는 옵션 값을 제공할 수 있습니다.
샘플 코드를 테스트하려면 로드하는 데 시간이 걸리는 URL을 사용하여 명령을 실행하고 로드가 완료되기 전에 Ctrl+C를 누릅니다. macOS에서 Command+마침표(.)를 누릅니다. 예시:
testapp --url https://learn.microsoft.com/aspnet/core/fundamentals/minimal-apis
The operation was aborted
취소 작업은 CancellationToken.Register 메서드를 사용하여 직접 추가할 수도 있습니다.
프로세스 종료 코드를 설정하는 다른 방법에 대한 자세한 내용은 종료 코드 설정을 참조하세요.
참고 항목
.NET