public async Task Process(byte[] processMessage, IPlatformExit platformExit) { KernelMessage kernelMessage = JsonConvert.DeserializeObject <KernelMessage>(Encoding.UTF8.GetString(processMessage)); ScrapySource scrapySource = await coreCache.RestoreAsync <ScrapySource>(PrefixConst.SOURCE_META + kernelMessage.JobId); var sourceType = scrapySource.Source.Type; IExtractor extractor = extractorManager.GetExtrator(sourceType); await extractor.ExtractTarget(scrapySource.Source.Parameters.ToString(), scrapySource.SaveTo); string transformJobIdsKey = PrefixConst.SOURCE_TRANSFOR_MAP + kernelMessage.JobId; TaskingManager taskingManager = new TaskingManager(); List <string> jobIds = await coreCache.RestoreAsync <List <string> >(transformJobIdsKey); if (jobIds != null) { foreach (var x in jobIds) { KernelMessage transforMsg = new KernelMessage() { JobId = x, MessageId = kernelMessage.MessageId, MessageName = kernelMessage.MessageName }; taskingManager.AddTask(platformExit.OutRandom(transforMsg)); logger.Debug(JsonConvert.SerializeObject(transforMsg)); } } await taskingManager.WhenAll(); }