c# - 处理来自不同线程的线程的最佳方法是什么?
问题描述
我的要求是处理来自不同线程的线程。我可以使用thread.Suspend()
,但我收到警告,例如这些方法已被弃用thread.Resume()
。thread.Abort()
这些方法有什么替代方法吗,我创建了一个类似于我的应用程序的虚拟控制台应用程序,请帮助解决这个问题。下面是我的代码
using System;
using System.Threading;
namespace ThreadingTest
{
internal class Program
{
private static Thread mainThread;
private static void Main(string[] args)
{
mainThread = Thread.CurrentThread;
Thread connectServerThread = new Thread(new ThreadStart(ConnectServer));
connectServerThread.Start();
int i = 0;
while (true)
{
if (i++ % 5000 == 0)
{
Console.WriteLine(i);
}
}
}
private static void ConnectServer()
{
for (int i = 0; i < 20; i++)
{
Thread.Sleep(2000);
if (i % 2 == 0)
{
mainThread.Suspend();
}
else
{
mainThread.Resume();
}
}
mainThread.Abort();
}
}
}
解决方案
我会遵循文档中的建议
不要使用 Suspend 和 Resume 方法来同步线程的活动。当您挂起线程时,您无法知道线程正在执行什么代码。如果在安全权限评估期间挂起一个线程而它持有锁,则 AppDomain 中的其他线程可能会被阻止。如果在执行类构造函数时挂起线程,则 AppDomain 中尝试使用该类的其他线程将被阻止。死锁很容易发生。
更具体地说,警告提供的建议:
请使用 System.Threading 中的其他类,例如 Monitor、Mutex、Event 和 Semaphore,以同步线程或保护资源