Пример #1
0
        public async Task HandleWorkflowsUntilPunctuation(Immutable <IndexWorkflowRecordNode> workflowRecords)
        {
            try
            {
                var workflows = workflowRecords.Value;
                while (workflows != null)
                {
                    Dictionary <IIndexableGrain, HashSet <Guid> > grainsToActiveWorkflows = null;
                    if (IsFaultTolerant)
                    {
                        grainsToActiveWorkflows = await GetActiveWorkflowsListsFromGrains(workflows);
                    }
                    var updatesToIndexes = CreateAMapForUpdatesToIndexes();
                    PopulateUpdatesToIndexes(workflows, updatesToIndexes, grainsToActiveWorkflows);
                    await Task.WhenAll(PrepareIndexUpdateTasks(updatesToIndexes));

                    if (IsFaultTolerant)
                    {
                        Task.WhenAll(RemoveFromActiveWorkflowsInGrainsTasks(grainsToActiveWorkflows)).Ignore();
                    }
                    workflows = (await WorkflowQueue.GiveMoreWorkflowsOrSetAsIdle()).Value;
                }
            }
            catch (Exception e)
            {
                throw e;
            }
        }