Maison >développement back-end >C++ >Comment puis-je réaliser une exécution de processus asynchrone dans .NET ?

Comment puis-je réaliser une exécution de processus asynchrone dans .NET ?

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2025-01-05 03:44:40561parcourir

How Can I Achieve Asynchronous Process Execution in .NET?

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn