33 lines
878 B
C#
33 lines
878 B
C#
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<int> GetAwaiter(this Process process)
|
|
{
|
|
var tcs = new TaskCompletionSource<int>();
|
|
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;
|
|
}
|
|
}
|