private void doRemoveLoader(string type)
        {
            {
                IResourceLoader dummy;
                AsyncLoaders.TryRemove(type, out dummy);
            }

            ConcurrentDictionary <string, ResourceHandle> handles;

            if (resourceHandles.TryGetValue(type, out handles))
            {
                foreach (var handle in handles)
                {
                    IEvent evt1 = new BasicEvent();
                    handle.Value.Unload(evt1);

                    IEvent evt2 = new BasicEvent();
                    handle.Value.Unload(evt2);

                    evt1.Wait();
                    evt2.Wait();
                }
                resourceHandles.TryRemove(type, out handles);
            }
        }
        public void AddLoader(IResourceLoader loader)
        {
            var asyncLoader = new AsyncLoader(loader, AsyncExecutor);

            AsyncLoaders.AddOrUpdate(loader.Type, asyncLoader, (a, b) => asyncLoader);

            if (resourceHandles.TryAdd(loader.Type, new ConcurrentDictionary <string, ResourceHandle>(16, 256)))
            {
                var dummy = AsyncLoaders[loader.Type].Default;

                Loaders.AddOrUpdate(loader.Type, loader, (a, b) => loader);
            }
            else
            {
                throw new NotSupportedException("Error: Loadertype '" + loader.Type + "' already registered.");
            }
        }