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; } }