Пример #1
0
        private static async Task <long[]> ProcessFibonacciWithTasks(long[] fibonacciNumbers, int numberOfTasks, ProcessingType processingType)
        {
            var tasks = new List <Task>(numberOfTasks);

            for (int i = 0; i < numberOfTasks; i++)
            {
                int taskIndex = i; //concurrency workaround for captured vars
                var task      = new Task(() => CalculateFibonacci(fibonacciNumbers, numberOfTasks, taskIndex, processingType));
                tasks.Add(task);
            }

            var watch = Stopwatch.StartNew();

            tasks.ForEach(x => x.Start());
            await Task.WhenAll(tasks);

            watch.Stop();

            Console.WriteLine($"{numberOfTasks} Threads: {watch.ElapsedMilliseconds} milliseconds");

            var numbers = ConcurrentStore.GetSortedNumbersFromStore();

            ConcurrentStore.ClearStore();

            return(numbers);
        }
Пример #2
0
        public static void AddNumberAndCheckIfIsDone(long number)
        {
            ConcurrentStore.AddNumberToStore(number);
            Interlocked.Increment(ref _numbersProcessed);

            if (_numbersProcessed >= _numbersToProcess)
            {
                _stopWatch.Stop();
                Console.WriteLine($"{_stopWatch.ElapsedMilliseconds} milliseconds");

                var result = ConcurrentStore.GetSortedNumbersFromStore();
                FileUtility.WriteNumbersToFile(OUTPUT_FILE, result);

                ConcurrentStore.ClearStore();
                _numbersProcessed = 0;
            }
        }