예제 #1
0
        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);
        }
예제 #2
0
        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);
        }