Rumah >pembangunan bahagian belakang >C++ >Bagaimana untuk Mencapai Pelaksanaan Proses Asynchronous dalam C#?

Bagaimana untuk Mencapai Pelaksanaan Proses Asynchronous dalam C#?

Patricia Arquette
Patricia Arquetteasal
2025-01-05 13:15:42930semak imbas

How to Achieve Asynchronous Process Execution in C#?

Pelaksanaan Proses Asynchronous dalam C#

Soalan:

Dalam rangka kerja .NET, Kaedah Process.Start membolehkan kami menjalankan aplikasi luaran atau melaksanakan fail kelompok. Walau bagaimanapun, kaedah ini adalah segerak, bermakna ia menyekat urutan panggilan sehingga proses selesai. Adakah terdapat alternatif asynchronous kepada Process.Start yang membolehkan kita menunggu proses selesai?

Jawapan:

Walaupun Process.Start ialah kaedah segerak, ada cara untuk mencapai pelaksanaan proses tak segerak dalam C#. Berikut ialah dua pendekatan:

Menggunakan Task.Run:

Jika anda hanya mahu memulakan proses secara tidak segerak, anda boleh menggunakan kaedah Task.Run. Ini akan mencipta urutan baharu dan melaksanakan proses pada urutan itu, membebaskan utas panggilan.

private async void RunCommandAsync()
{
    await Task.Run(() => Process.Start("command to run"));
}

Async Tunggu Proses Selesai:

Jika anda mahu untuk tidak segerak menunggu proses selesai dan mendapatkan kod keluarnya, anda boleh menggunakan acara Process.Exited bersama-sama dengan TaskCompletionSource:

private async Task<int> RunProcessAsync(string fileName)
{
    var tcs = new TaskCompletionSource<int>();

    var process = new Process
    {
        StartInfo = { FileName = fileName },
        EnableRaisingEvents = true
    };

    process.Exited += (sender, args) =>
    {
        tcs.SetResult(process.ExitCode);
        process.Dispose();
    };

    process.Start();

    return await tcs.Task;
}

Pendekatan ini akan mencipta proses baharu dan mendaftarkan pengendali acara untuk acara Exited. Apabila proses keluar, pengendali acara akan dicetuskan dan TaskCompletionSource akan dilengkapkan dengan kod keluar proses. Operasi menunggu akan menggantung pelaksanaan kod panggilan sehingga proses selesai.

Atas ialah kandungan terperinci Bagaimana untuk Mencapai Pelaksanaan Proses Asynchronous dalam C#?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
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