public async Task Perform()
        {
            while (sourceProvider.HasNext())
            {
                var item = await sourceProvider.GetNext();

                var metadatas = new ConcurrentDictionary <string, IMetadata>();

                metadataProviders.AsParallel().ForAll(async mp => metadatas.TryAdd(mp.Name, await mp.GetMetadata(item)));

                databaseProvider.Add(item, metadatas);
            }
        }