public static Task WaitForExitAsync()

in src/dotnet/ReSharperPlugin.DotNetDisassembler/JitDisasm/ProcessUtils.cs [112:132]


    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(() =>
            {
                process.KillProccessSafe();
                tcs.TrySetCanceled(cancellationToken);
            });
        }

        return process.HasExited ? Task.CompletedTask : tcs.Task;
    }