终止worker执行的方法

 时间:2024-10-25 20:27:42

1、该示例创建一个名为Worker的类,该类包含辅助线程将执行的方法DoWork。这实际上是辅助线程的Main函数。辅助线程将通过调用此方法来开始执行,并在此方法返回时自动终止。public void DoWork(){ while (!_shouldStop) { Console.WriteLine("worker thread: working..."); } Console.WriteLine("worker thread: terminating gracefully.");}

2、Worker 类包含另一个方法,该方法用于通知 DoWork 它应当返回。此方法名为 RequestStop,如下所示:public void RequestStop(){ _shouldStop = true;}

3、RequestStop 方法只是将 true 赋给 _shouldStop 数据成员。由于此数据成员由 DoWork 方法来检查,因此这会间接导致 DoWork 返回,从而终止辅助线程。但是,您应当注意:DoWork 和 RequestStop 将由不同线程执行。DoWork 由辅助线程执行,而 RequestStop 由主线程执行,因此 _shouldStop 数据成员声明为 volatile,如下所示:private volatile bool _shouldStop;

4、此时,只有执行 Main 的主线程还存在。它会显示一条最终消息,然后返回,蒉翟蛳庹从而使主线程也终止。下面是完整的示例。using S烤恤鹇灭ystem;using System.Threading;public class Worker{ // This method will be called when the thread is started. public void DoWork() { while (!_shouldStop) { Console.WriteLine("worker thread: working..."); } Console.WriteLine("worker thread: terminating gracefully."); } public void RequestStop() { _shouldStop = true; } // Volatile is used as hint to the compiler that this data // member will be accessed by multiple threads. private volatile bool _shouldStop;}public class WorkerThreadExample{ static void Main() { // Create the thread object. This does not start the thread. Worker workerObject = new Worker(); Thread workerThread = new Thread(workerObject.DoWork); // Start the worker thread. workerThread.Start(); Console.WriteLine("main thread: Starting worker thread..."); // Loop until worker thread activates. while (!workerThread.IsAlive); // Put the main thread to sleep for 1 millisecond to // allow the worker thread to do some work: Thread.Sleep(1); // Request that the worker thread stop itself: workerObject.RequestStop(); // Use the Join method to block the current thread // until the object's thread terminates. workerThread.Join(); Console.WriteLine("main thread: Worker thread has terminated."); }}

5、输出如下:main thread: starting worker th筠续师诈read...worker thread: working...worker thread: working...worker thread: working...worker thread: working...worker thread: working...worker thread: working...worker thread: working...worker thread: working...worker thread: working...worker thread: working...worker thread: working...worker thread: terminating gracefully...main thread: worker thread has terminated

  • docker镜像加速方法
  • windows10如何设置电脑日历里的农历及字体
  • Android Studio如何显示编译程序
  • Manjaro怎么设置whisker菜单中应用图标大小
  • 如何利用QQ邮箱发送贺卡
  • 热门搜索
    语文天地手抄报 读好书手抄报内容 关于英语的手抄报图片 和读书有关的手抄报 关于梦想的手抄报图片 我爱我班手抄报内容 关于龙的手抄报 三年级上英语手抄报 卫生手抄报内容 反对邪教手抄报图片