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;
}