c# – 是否总有可能强制使用Task的新线程?

我试图在每次调用Task.Factory.StartNew时创建一个新线程.问题是如何在不抛出异常的情况下运行代码:

static void Main(string[] args)
        {
            int firstThreadId = 0;

            Task.Factory.StartNew(() => firstThreadId = Thread.CurrentThread.ManagedThreadId);

            for (int i = 0; i < 100; i++)
            {
                Task.Factory.StartNew(() =>
                {
                    while (true)
                    {
                        Thread.Sleep(1000);
                        if (firstThreadId == Thread.CurrentThread.ManagedThreadId)
                            throw new Exception("The first thread is reused.");
                    }
                });
            }
            Console.Read();
        }

编辑:新代码,如果你评论第一个语句没有问题.但是,如果你拥有它,WOW,“Thread reused”消息将被写入控制台.你能解释一下,因为我真的很困惑.

static void Main(string[] args)
        {
            ConcurrentDictionary<int, int> startedThreads = new ConcurrentDictionary<int, int>();

            for (int i = 0; i < 10; i++)
            {
                Task.Factory.StartNew(() =>
                {
                    Task.Factory.StartNew(() =>
                    {
                        startedThreads.AddOrUpdate(Thread.CurrentThread.ManagedThreadId, Thread.CurrentThread.ManagedThreadId, (a, b) => b);
                    }, TaskCreationOptions.LongRunning);

                    for (int j = 0; j < 100; j++)
                    {
                        Task.Factory.StartNew(() =>
                        {
                            while (true)
                            {
                                Thread.Sleep(10);
                                if (startedThreads.ContainsKey(Thread.CurrentThread.ManagedThreadId))
                                    Console.WriteLine("Thread reused");
                            }
                        }, TaskCreationOptions.LongRunning);
                    }
                });
            }

            Console.Read();
        }
如果在启动任务时指定TaskCreationOptions.LongRunning,则会提供调度程序的提示,默认调度程序将此提示作为为任务创建新线程的指示符.

这只是一个暗示 – 我不确定我会依赖它……但我没有看到任何使用默认调度程序的反例.

https://stackoverflow.com/questions/13570579/is-it-possible-always-to-force-a-new-thread-with-task

本站文章除注明转载外,均为本站原创或编译
转载请明显位置注明出处:c# – 是否总有可能强制使用Task的新线程?