为什么我的任务无法在c#控制台应用程序中运行?

问题描述

我制作了一个简单的Producer-Consumer控制台应用程序,其中有两个使用者和一个生产者。我正在检查一些随机数是否可以被3或5整除。

代码如下:

using System;
using System.Collections.Concurrent;
using System.Threading.Tasks;

namespace ProducerConsumer
{
    class Program
    {
        public class OneProducerTwoConsumer
        {
            private readonly BlockingCollection<int> randomNumbersForDivisibleByFive = new BlockingCollection<int>(10);
            private readonly BlockingCollection<int> randomNumbersForDivisibleByThree = new BlockingCollection<int>(10);

            private int numberOfDivisibleByFive = 0;
            private int numberOfDivisibleByThree = 0;

            private void Producer()
            {
                int numberOfNumbers = 50;
                Random random = new Random();

                for (int i = 0; i < numberOfNumbers; i++)
                {
                    var randomNumber = random.Next();

                    randomNumbersForDivisibleByFive.Add(randomNumber);
                    randomNumbersForDivisibleByThree.Add(randomNumber);
                }
            }

            private void ConsumerDivisibleByFive()
            {
                foreach (int randomNumber in randomNumbersForDivisibleByFive.GetConsumingEnumerable())
                {
                    if(randomNumber % 5 == 0)
                    {
                        numberOfDivisibleByFive++;
                        Console.WriteLine($"{randomNumber} is divisible by 5");
                    }
                    else
                    {
                        Console.WriteLine($"{randomNumber} is not divisible by 5");
                    }
                }

                Console.WriteLine($"There are {numberOfDivisibleByFive} numbers divisible by 5 generated from the producer");
            }

            private void ConsumerDivisibleByThree()
            {
                foreach (int randomNumber in randomNumbersForDivisibleByThree.GetConsumingEnumerable())
                {
                    if (randomNumber % 3 == 0)
                    {
                        numberOfDivisibleByThree++;
                        Console.WriteLine($"{randomNumber} is divisible by 3");
                    }
                    else
                    {
                        Console.WriteLine($"{randomNumber} is not divisible by 3");
                    }
                }

                Console.WriteLine($"There are {numberOfDivisibleByThree} numbers divisible by 3 generated from the producer");
            }

            public void RunTasks()
            {
                var producingTask = Task.Run(() => Producer());

                var divisibleByFiveTask = Task.Run(() => ConsumerDivisibleByFive());

                var divisibleByThreeTask = Task.Run(() => ConsumerDivisibleByThree());

                producingTask.Start();
                divisibleByFiveTask.Start();
                divisibleByThreeTask.Start();
            }
        }

        public static void Main(string[] args)
        {
            OneProducerTwoConsumer oneProducerTwoConsumer = new OneProducerTwoConsumer();
            oneProducerTwoConsumer.RunTasks();
        }
    }
}

但是,当我运行代码时,控制台上没有任何内容,并且我的代码也没有错。

任何帮助表示赞赏!

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)