暂停/恢复C#中的线程

问题描述 投票:1回答:1

当达到某个值但我无法做到时,我尝试暂停所有线程。

我希望当达到此值时,所有线程都将暂停10秒钟,在这10秒钟之后,所有线程将再次启动。

我尝试过:Threads.Sleep(); | Threads.Interrupt();Threads.Abort();,但无效。

我尝试了您在下面的代码中看到的内容。

        static void Main(string[] args)
        {
            for (int i = 0; i < 10; i++)
            {
                Threads.Add(new Thread(new ThreadStart(example)));
                Threads[i].Start();
            }

            for (int i = 0; i < Threads.Count; i++)
                Threads[i].Join();
        }

        static void example()
        {           
            while (true)
            {
                Console.WriteLine(value++);
                checkValue();
            }
        }
        public static void checkValue()
        {
            if (value% 1000 == 0 && value!= 0)
            {
                for (int i = 0; i < Threads.Count; i++)
                    Threads[i].Interrupt();

                Thread.Sleep(1000);

                for (int i = 0; i < Threads.Count; i++)
                    Threads[i].Resume();
            }
        }
c# multithreading sleep resume pause
1个回答
1
投票

这是通过使用Stephen Cleary的PauseTokenSource包中的PauseTokenSource + PauseToken对来协作地暂停某些线程的示例。此示例还显示了使用类似的PauseToken + AsyncEx.Coordination对,即CancellationTokenSource创建了上述暂停机制。

CancellationTokenSource

[您可能需要先阅读CancellationToken,以了解.NET平台用于协作取消的模型。合作的“暂停”非常相似。

© www.soinside.com 2019 - 2024. All rights reserved.