コード例 #1
0
        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;
            }
        }
コード例 #2
0
        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);
            }
        }
コード例 #3
0
        public static void StartOnWorkerThread <T>(Func <T> t)
        {
            AsyncSystem.Log("StartOnWorker");

            Task.Factory.StartNew(t,
                                  CancellationToken.None,
                                  TaskCreationOptions.RunContinuationsAsynchronously,
                                  scheduler);
        }
コード例 #4
0
        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);
        }
コード例 #5
0
        public static async Task RunOnWorkerThread(Action t)
        {
            var res = new TaskCompletionSource <object>();

            AsyncSystem.Log("RunOnWorker");

            StartOnWorkerThread(() =>
            {
                t();

                res.SetResult(null);
            });

            await res.Task;
        }