Cara menangani penghentian pada System.CommandLine
Penting
System.CommandLine
saat ini dalam PRATINJAU, dan dokumentasi ini untuk versi 2.0 beta 4.
Beberapa informasi terkait produk prarilis yang dapat diubah secara signifikan sebelum dirilis. Microsoft tidak memberikan jaminan, tersirat maupun tersurat, sehubungan dengan informasi yang diberikan di sini.
Untuk menangani penghentian, masukkan instans CancellationToken ke dalam kode handler Anda. Token ini kemudian dapat diteruskan ke API asinkron yang Anda panggil dari dalam handler Anda, seperti yang ditunjukkan dalam contoh berikut:
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;
}
}
Kode sebelumnya menggunakan overload SetHandler
yang mendapatkan instans InvocationContext daripada satu atau beberapa objek IValueDescriptor<T>
. InvocationContext
digunakan untuk mendapatkan objek CancellationToken
dan ParseResult. ParseResult
dapat memberikan nilai argumen atau opsi.
Untuk menguji kode sampel, jalankan perintah dengan URL yang akan memakan waktu sejenak untuk dimuat, dan sebelum selesai memuat, tekan Ctrl+C. Pada macOS tekan Command+Period(.). Contohnya:
testapp --url https://learn.microsoft.com/aspnet/core/fundamentals/minimal-apis
The operation was aborted
Tindakan pembatalan juga dapat ditambahkan langsung menggunakan metode CancellationToken.Register.
Untuk informasi tentang cara alternatif untuk mengatur kode keluar proses, lihat Mengatur kode keluar.