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