处理来自其他线程的线程的最佳方法是什么?

时间:2019-11-29 07:34:16

标签: c# multithreading thread-safety

我的要求是处理来自其他线程的线程。我可以使用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();
        }
    }
}

1 个答案:

答案 0 :(得分:1)

我会遵循documentation

中的建议
  

请勿使用Suspend和Resume方法来同步线程的活动。您无法知道挂起线程时正在执行什么代码。如果在安全权限评估期间暂停线程持有锁的线程,则AppDomain中的其他线程可能会被阻止。如果在执行类构造函数时挂起线程,则AppDomain中尝试使用该类的其他线程将被阻止。死锁很容易发生。

更具体地说,警告提供的建议:

  

请使用System.Threading中的其他类(例如Monitor,Mutex,Event和Semaphore)来同步线程或保护资源