public async Task TestManyTasks() { var createChildrenBlock = new TransformBlock <JobEntity, List <JobEntity> >(async entity => { var res = new List <JobEntity>(); for (var i = 0; i < 100; i++) { res.Add(await _client.CreateNewJobAsync(new AddJobDto("ABC", entity.JobId))); } return(res); }); var adapter = new TransformManyBlock <List <JobEntity>, JobEntity>(entities => entities); var updateStateBlock = new ActionBlock <JobEntity>(async entity => { await _client.UpdateJobStatesAsync(entity.JobId, new UpdateJobStateDto(entity.JobId % 2 == 0 ? JobState.RanToCompletion : JobState.Faulted)); }, Helper.GetOutOfGrainExecutionOptions()); var root = await _client.CreateNewJobAsync(new AddJobDto("rootJob")); Console.WriteLine($"RootJobId {root.JobId}"); createChildrenBlock.LinkTo(adapter, new DataflowLinkOptions { PropagateCompletion = true }); adapter.LinkTo(updateStateBlock, new DataflowLinkOptions { PropagateCompletion = true }); await createChildrenBlock.PostToBlockUntilSuccessAsync(root); createChildrenBlock.Complete(); await updateStateBlock.Completion; await _client.UpdateJobStatesAsync(root.JobId, new UpdateJobStateDto(JobState.RanToCompletion)); root = await _client.GetJobEntityAsync(root.JobId); Assert.AreEqual(JobState.Faulted, root.CurrentJobState); }