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