Beispiel #1
0
        protected void ExecuteAsync(Action action)
        {
            object WrappedAction()
            {
                var savedAssetBundle = AssetBundle.Initialized ? AssetBundle.Current : null;
                var bundle           = new TangerineAssetBundle(Workspace.Instance.AssetsDirectory);

                AssetBundle.SetCurrent(bundle, resetTexturePool: false);
                try {
                    action();
                } finally {
                    bundle.Dispose();
                    AssetBundle.SetCurrent(savedAssetBundle, resetTexturePool: false);
                }
                return(null);
            }

            _ = ExecuteAsync(WrappedAction);
        }
Beispiel #2
0
        protected async System.Threading.Tasks.Task <T> ExecuteAsync <T>(Func <T> function)
        {
            T WrappedFunction()
            {
                var savedAssetBundle = AssetBundle.Initialized ? AssetBundle.Current : null;
                var bundle           = new TangerineAssetBundle(Workspace.Instance.AssetsDirectory);

                AssetBundle.SetCurrent(bundle, resetTexturePool: false);
                try {
                    return(function());
                } finally {
                    bundle.Dispose();
                    AssetBundle.SetCurrent(savedAssetBundle, resetTexturePool: false);
                }
            }

            var result = default(T);

            try {
                if (isExecuting)
                {
                    Console.WriteLine("Orange is busy with a previous request.");
                    return(result);
                }
                isExecuting = true;
                Executing?.Invoke();
                result = await System.Threading.Tasks.Task <T> .Factory.StartNew(WrappedFunction);

                await System.Threading.Tasks.Task.Delay(500);
            } catch (System.Exception e) {
                Console.WriteLine(e);
            } finally {
                isExecuting = false;
            }
            Console.WriteLine("Done");
            return(result);
        }