using System; using System.Collections.Generic; using System.Diagnostics; using System.Runtime.CompilerServices; using System.Threading.Tasks; using UnityEngine; public static class AwaitExtensions { public static TaskAwaiter GetAwaiter(this Process process) { var tcs = new TaskCompletionSource(); process.EnableRaisingEvents = true; process.Exited += (s, e) => tcs.TrySetResult(process.ExitCode); if (process.HasExited) { tcs.TrySetResult(process.ExitCode); } return tcs.Task.GetAwaiter(); } // Any time you call an async method from sync code, you can either use this wrapper // method or you can define your own `async void` method that performs the await // on the given Task public static async void WrapErrors(this Task task) { await task; } }