Maison > développement back-end > C++ > Comment puis-je attendre de manière asynchrone la sortie du processus dans .NET sans blocage ?

Comment puis-je attendre de manière asynchrone la sortie du processus dans .NET sans blocage ?

Susan Sarandon
Libérer: 2025-01-05 11:44:39
original
602 Les gens l'ont consulté

How Can I Asynchronously Wait for Process Exit in .NET Without Blocking?

Process.WaitForExit() asynchrone avec événements

La recherche d'une alternative non bloquante à Process.WaitForExit() a conduit à la découverte d'une approche événementielle précieuse. Particulièrement pertinent pour .NET 4.0/C# 5 et versions ultérieures, ce modèle asynchrone offre une solution élégante.

Considérez l'extrait de code suivant :

/// <summary>
/// Waits asynchronously for the process to exit.
/// </summary>
/// <param name="process">The process to wait for cancellation.</param>
/// <param name="cancellationToken">A cancellation token. If invoked, the task will return
/// immediately as canceled.</param>
/// <returns>A Task representing waiting for the process to end.</returns>
public static Task WaitForExitAsync(this Process process,
    CancellationToken cancellationToken = default(CancellationToken))
{
    if (process.HasExited) return Task.CompletedTask;

    var tcs = new TaskCompletionSource<object>();
    process.EnableRaisingEvents = true;
    process.Exited += (sender, args) => tcs.TrySetResult(null);
    if (cancellationToken != default(CancellationToken))
        cancellationToken.Register(() => tcs.SetCanceled());

    return process.HasExited ? Task.CompletedTask : tcs.Task;
}
Copier après la connexion

Pour utiliser cette méthode asynchrone, appelez-la simplement comme suit :

public async void Test()
{
   var process = new Process("processName");
   process.Start();
   await process.WaitForExitAsync();

   //Do some fun stuff here...
}
Copier après la connexion

En adoptant cette approche asynchrone basée sur les événements, vous pouvez surveiller efficacement l'achèvement du processus sans compromettre la réactivité de l'interface utilisateur.

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal