Exécution de processus asynchrone dans .NET
La méthode Process.Start() permet aux programmeurs de lancer l'exécution d'applications externes ou de fichiers batch, mais manque de support asynchrone. Cette limitation peut être gênante lorsque vous travaillez avec des applications console qui utilisent le modèle async/await.
Heureusement, il existe des solutions de contournement pour réaliser une exécution de processus asynchrone. Alors que Process.Start() lance uniquement le processus, l'exécution ultérieure est gérée en dehors du paradigme async/wait.
Si l'intention est simplement de démarrer le processus sans attendre son achèvement, on peut utiliser l'approche suivante :
void async RunCommand() { await Task.Run(() => Process.Start("command to run")); }
Cependant, si le comportement souhaité implique d'attendre de manière asynchrone la fin du processus, l'événement Exited et un TaskCompletionSource peuvent être combiné :
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; }
En utilisant la technique ci-dessus, le thread principal peut attendre de manière asynchrone la fin du processus, permettant une intégration transparente avec d'autres opérations asynchrones.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!