【问题标题】:Anyway to detect if a threaded method has completed无论如何检测线程方法是否已完成
【发布时间】:2009-04-14 19:56:03
【问题描述】:

我有一个队列,基本上是 albahari.com 中的生产者/消费者队列 threading book,它从队列中取出一个队列项,这是一个从队列中取出的动作执行块,然后调用一个方法来执行队列项中的动作列表。

我可以很容易地通过加入一个空动作块来终止队列,并通过使用 thread.sleep() 执行自旋/等待来阻塞主线程,直到队列计数变为零,并且所有线程都通过 while ! =null 循环,从而完成,但执行最后一个动作列表的方法可能仍在执行最后一个线程。

问题是,他们是否无论如何要检测该方法是否仍有线程在执行它,例如可能使用信号量或带有互锁的计数器在方法开始时向上计数信号量并在结束时将其计数。所以如果它达到零,我知道它没有线程。

这是在接口上实现一个destroy方法,在调用dispose之前将其关闭。

【问题讨论】:

  • 这是我使用的 System.Threading.Thread 模型,并且 IsAlive 属性非常适合测试,并且有效。感谢您的快速回复。

标签: c# multithreading blocking


【解决方案1】:

使用已完成事件的Backgroundworker

【讨论】:

    【解决方案2】:

    如果你像这样开始一个线程:

    System.Threading.Thread mythread = new System.Threading.Thread();
    mythread.Start();
    

    您可以查看:

    mythread.IsAlive()
    

    随时确定其状态。

    【讨论】:

    • 状态轮询在很久很久以前就被弃用了,使用事件。
    【解决方案3】:

    在方法上使用 PostSharp 属性。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-03-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-11-15
      • 1970-01-01
      • 2016-08-24
      相关资源
      最近更新 更多