当达到某个值但我无法做到时,我尝试暂停所有线程。
我希望当达到此值时,所有线程都将暂停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();
}
}
这是通过使用Stephen Cleary的PauseTokenSource
包中的PauseTokenSource
+ PauseToken
对来协作地暂停某些线程的示例。此示例还显示了使用类似的PauseToken
+ AsyncEx.Coordination对,即CancellationTokenSource
创建了上述暂停机制。
CancellationTokenSource
[您可能需要先阅读CancellationToken
,以了解.NET平台用于协作取消的模型。合作的“暂停”非常相似。