12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091 |
- using System;
- using System.Threading;
- using System.Threading.Tasks;
- namespace Unity.Services.Core.Threading.Internal
- {
- class UnityThreadUtilsInternal : IUnityThreadUtils
- {
- public static Task PostAsync(Action action)
- {
- return Task.Factory.StartNew(
- action, CancellationToken.None, TaskCreationOptions.None, UnityThreadUtils.UnityThreadScheduler);
- }
- public static Task PostAsync(Action<object> action, object state)
- {
- return Task.Factory.StartNew(
- action, state, CancellationToken.None, TaskCreationOptions.None,
- UnityThreadUtils.UnityThreadScheduler);
- }
- public static Task<T> PostAsync<T>(Func<T> action)
- {
- return Task<T>.Factory.StartNew(
- action, CancellationToken.None, TaskCreationOptions.None, UnityThreadUtils.UnityThreadScheduler);
- }
- public static Task<T> PostAsync<T>(Func<object, T> action, object state)
- {
- return Task<T>.Factory.StartNew(
- action, state, CancellationToken.None, TaskCreationOptions.None,
- UnityThreadUtils.UnityThreadScheduler);
- }
- public static void Send(Action action)
- {
- if (UnityThreadUtils.IsRunningOnUnityThread)
- {
- action();
- return;
- }
- PostAsync(action).Wait();
- }
- public static void Send(Action<object> action, object state)
- {
- if (UnityThreadUtils.IsRunningOnUnityThread)
- {
- action(state);
- return;
- }
- PostAsync(action, state).Wait();
- }
- public static T Send<T>(Func<T> action)
- {
- if (UnityThreadUtils.IsRunningOnUnityThread)
- {
- return action();
- }
- var task = PostAsync(action);
- task.Wait();
- return task.Result;
- }
- public static T Send<T>(Func<object, T> action, object state)
- {
- if (UnityThreadUtils.IsRunningOnUnityThread)
- {
- return action(state);
- }
- var task = PostAsync(action, state);
- task.Wait();
- return task.Result;
- }
- bool IUnityThreadUtils.IsRunningOnUnityThread => UnityThreadUtils.IsRunningOnUnityThread;
- Task IUnityThreadUtils.PostAsync(Action action) => PostAsync(action);
- Task IUnityThreadUtils.PostAsync(Action<object> action, object state) => PostAsync(action, state);
- Task<T> IUnityThreadUtils.PostAsync<T>(Func<T> action) => PostAsync(action);
- Task<T> IUnityThreadUtils.PostAsync<T>(Func<object, T> action, object state) => PostAsync(action, state);
- void IUnityThreadUtils.Send(Action action) => Send(action);
- void IUnityThreadUtils.Send(Action<object> action, object state) => Send(action, state);
- T IUnityThreadUtils.Send<T>(Func<T> action) => Send(action);
- T IUnityThreadUtils.Send<T>(Func<object, T> action, object state) => Send(action, state);
- }
- }
|