public static async Task RunOnMain(Action t) { if (Thread.CurrentThread == AsyncSystem.MainThread) { t(); } else { var res = new TaskCompletionSource <bool>(); AsyncSystem.Log("RunOnMain"); StartOnMainThread(() => { try { t(); res.SetResult(true); } catch (Exception e) { AsyncSystem.LogError(e); } }); await res.Task; } }
public static async Task <T> RunOnMain <T>(Func <T> t) { if (Thread.CurrentThread == AsyncSystem.MainThread) { return(t()); } else { var res = new TaskCompletionSource <T>(); AsyncSystem.Log("StartOnMain"); StartOnMainThread(() => { try { var ret = t(); res.SetResult(ret); } catch (Exception e) { Debug.LogError(e); } }); return(await res.Task); } }
public static void StartOnWorkerThread <T>(Func <T> t) { AsyncSystem.Log("StartOnWorker"); Task.Factory.StartNew(t, CancellationToken.None, TaskCreationOptions.RunContinuationsAsynchronously, scheduler); }
public static async Task <T> RunOnWorkerThread <T>(Func <T> t) { var res = new TaskCompletionSource <T>(); AsyncSystem.Log("RunOnWorker"); StartOnWorkerThread(() => { var ret = t(); res.SetResult(ret); }); return(await res.Task); }
public static async Task RunOnWorkerThread(Action t) { var res = new TaskCompletionSource <object>(); AsyncSystem.Log("RunOnWorker"); StartOnWorkerThread(() => { t(); res.SetResult(null); }); await res.Task; }