Asynchrone Prozessausführung in .NET
Mit der Process.Start()-Methode können Programmierer die Ausführung externer Anwendungen oder Batchdateien initiieren. aber es fehlt die asynchrone Unterstützung. Diese Einschränkung kann unpraktisch sein, wenn Sie mit Konsolenanwendungen arbeiten, die das Async/Wait-Muster verwenden.
Glücklicherweise gibt es Problemumgehungen, um eine asynchrone Prozessausführung zu erreichen. Während Process.Start() lediglich den Prozess initiiert, erfolgt die nachfolgende Ausführung außerhalb des Async/Wait-Paradigmas.
Wenn die Absicht lediglich darin besteht, den Prozess zu starten, ohne auf seinen Abschluss zu warten, kann man den folgenden Ansatz verwenden :
void async RunCommand() { await Task.Run(() => Process.Start("command to run")); }
Wenn das gewünschte Verhalten jedoch das asynchrone Warten auf den Abschluss des Prozesses beinhaltet, können das Exited-Ereignis und eine TaskCompletionSource sein kombiniert:
static 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 tcs.Task; }
Durch die Verwendung der oben genannten Technik kann der Hauptthread asynchron auf den Abschluss des Prozesses warten und so eine nahtlose Integration mit anderen asynchronen Vorgängen ermöglichen.
Das obige ist der detaillierte Inhalt vonWie kann ich eine asynchrone Prozessausführung in .NET erreichen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!