private void HandleAsyncLoader() { AsynchronousAssetLoader asyncLoader = (AsynchronousAssetLoader)loader; if (!depsLoaded) { if (!depsStarted) { ThreadPool.QueueUserWorkItem(LoadDeps); depsStarted = true; } } else { if (!asyncStarted) { ThreadPool.QueueUserWorkItem(LoadAsync); asyncStarted = true; } else if (asyncDone) { asset = asyncLoader.LoadSync(manager, descriptor.Path, Resolve(loader, descriptor), descriptor.Params); } } }
/// <summary> /// Loads parts of the asset asynchronously, if the loader is an AsynchronousLoader. /// </summary> private void LoadAsync(System.Object threadContext) { try { AsynchronousAssetLoader asyncLoader = (AsynchronousAssetLoader)loader; if (depsLoaded) { asyncLoader.LoadAsync(manager, descriptor.Path, Resolve(loader, descriptor), descriptor.Params); asyncDone = true; } } catch (Exception ex) { exception = ex; } }
/// <summary> /// Inject dependencies for loading. The tasks will be injected before the current one, and will be processed first. /// </summary> private void LoadDeps(System.Object threadContext) { try { AsynchronousAssetLoader asyncLoader = (AsynchronousAssetLoader)loader; dependencies = asyncLoader.GetDependencies(manager, descriptor.Path, Resolve(loader, descriptor), descriptor.Params); if (dependencies != null) { manager.InjectDependencies(descriptor, dependencies); } depsLoaded = true; } catch (Exception ex) { exception = ex; } }