Rumah >pembangunan bahagian belakang >C++ >Bagaimana untuk Mencapai Pelaksanaan Proses Asynchronous dalam 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!