public static void Run() { List <AsyncLoader> list = new List <AsyncLoader>(); Assembly[] assemblies = AppDomain.CurrentDomain.GetAssemblies(); foreach (Assembly assembly in assemblies) { Type[] types = assembly.GetTypes(); foreach (Type type in types) { if (!type.IsAbstract && typeof(AsyncLoaderType).IsAssignableFrom(type)) { AsyncLoader asyncLoader = (AsyncLoader)Activator.CreateInstance(type); list.Add(asyncLoader); loaders[type] = asyncLoader; asyncLoader.CollectLoaders(list); } } } if (loaders.Count > 0) { WorkItemCollection <RunLoader, object> workItemCollection = new WorkItemCollection <RunLoader, object>(); workItemCollection.Reset(null); foreach (AsyncLoader item in list) { workItemCollection.Add(new RunLoader { loader = item }); } GlobalJobManager.Run(workItemCollection); } }