Ejemplo n.º 1
0
        private Task StartWorker(Func <int, Task> work)
        {
            int workerId = idleWorkers.Min();

            idleWorkers = idleWorkers.Remove(workerId);

            Task doingWork = Task.Run
                             (
                async() =>
            {
                try
                {
                    await work(workerId);
                }
                finally
                {
                    CompleteWork(workerId);
                }
            }
                             );

            busyWorkers = busyWorkers.Add(workerId);

            return(Task.FromResult(doingWork));
        }