Rumah > pembangunan bahagian belakang > C++ > Bagaimanakah Saya Boleh Menunggu Proses Keluar secara Asynchronous dalam .NET Tanpa Menyekat?

Bagaimanakah Saya Boleh Menunggu Proses Keluar secara Asynchronous dalam .NET Tanpa Menyekat?

Susan Sarandon
Lepaskan: 2025-01-05 11:44:39
asal
597 orang telah melayarinya

How Can I Asynchronously Wait for Process Exit in .NET Without Blocking?

Asynchronous Process.WaitForExit() with Events

Mentanyakan tentang alternatif tanpa sekatan kepada Process.WaitForExit() telah membawa kepada penemuan pendekatan yang dipacu peristiwa yang berharga. Sangat relevan untuk .NET 4.0/C# 5 dan ke atas, corak async ini menawarkan penyelesaian yang elegan.

Pertimbangkan coretan kod berikut:

/// <summary>
/// Waits asynchronously for the process to exit.
/// </summary>
/// <param name="process">The process to wait for cancellation.</param>
/// <param name="cancellationToken">A cancellation token. If invoked, the task will return
/// immediately as canceled.</param>
/// <returns>A Task representing waiting for the process to end.</returns>
public static Task WaitForExitAsync(this Process process,
    CancellationToken cancellationToken = default(CancellationToken))
{
    if (process.HasExited) return Task.CompletedTask;

    var tcs = new TaskCompletionSource<object>();
    process.EnableRaisingEvents = true;
    process.Exited += (sender, args) => tcs.TrySetResult(null);
    if (cancellationToken != default(CancellationToken))
        cancellationToken.Register(() => tcs.SetCanceled());

    return process.HasExited ? Task.CompletedTask : tcs.Task;
}
Salin selepas log masuk

Untuk menggunakan kaedah async ini, hanya panggilnya seperti berikut:

public async void Test()
{
   var process = new Process("processName");
   process.Start();
   await process.WaitForExitAsync();

   //Do some fun stuff here...
}
Salin selepas log masuk

Dengan memeluk peristiwa yang didorong, tak segerak ini pendekatan, anda boleh memantau penyiapan proses dengan cekap tanpa menjejaskan responsif UI.

Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Menunggu Proses Keluar secara Asynchronous dalam .NET Tanpa Menyekat?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan