private static Task Enqueue(TaskQueue queue, Func <Task> task, object targetID = null) { DelegateItem item = new DelegateItem(task, targetID ?? new Object()); queue.Send(new Enqueue(item)).Wait(); return(item.Completion); }
internal void TaskResults(TaskQueue q, Task <int>[] tasks) { GIVEN["a TaskQueue"] = () => q = CreateQueue(degreeOfParallelism: 2); When["enquing 10 tasks"] = () => { tasks = Enumerable.Range(1, 10) .Select(i => { var item = new DelegateItem <int>(createResultTask(i), i); q.Send(new Enqueue(item)).Wait(); return(item.Completion); }) .ToArray(); return(q.Shutdown()); }; THEN["their results can be awaited"] = () => tasks.Select(t => t.Result).Should().BeEquivalentTo(Enumerable.Range(1, 10)); Func <Task <int> > createResultTask(int result) => () => Task.FromResult(result); }