【问题标题】:.NET Threading : How to wait for other thread to finish some task.NET 线程:如何等待其他线程完成某些任务
【发布时间】:2011-06-03 16:55:04
【问题描述】:

假设我有方法 void SomeMethod(动作回调) 该方法在后台线程中做一些工作,然后调用回调。问题是 - 如何阻塞当前线程直到回调被调用?

有一个例子

bool finished = false;
SomeMethod(delegate{
 finished = true;
});
while(!finished)
  Thread.Sleep();

但我相信应该有更好的方法

【问题讨论】:

  • 如果你要阻塞当前线程直到后台线程的工作完成,你能不能只做当前线程的工作?
  • 不,很遗憾我无法在当前线程中完成工作。
  • 您是否考虑过将等待之后的代码放入线程中,或者使用回调/事件?您所描述的是同步操作。是否有更多信息?
  • 也许当前线程也是一个GUI的主线程

标签: c# .net multithreading


【解决方案1】:

您可以使用 AutoResetEvent 在线程完成时发出信号。

检查此代码sn-p:

    AutoResetEvent terminateEvent = new AutoResetEvent(false);
    bool finished = false;
    SomeMethod(delegate
    {
        terminateEvent.Set();
    });
    terminateEvent.WaitOne();

【讨论】:

  • 谢谢,它确实有效。它比线程睡眠工作得更快吗?
  • 自旋锁(在while循环中不断检查标志,可能使用Thread.Sleep)在阻塞时间非常小时可能更快,否则,AutoResetEvent 是要走的路.
【解决方案2】:

检查Thread.Join() 会起作用

Example of this

【讨论】:

  • Thread.Join的问题是其他线程调用callback时没有完成。
猜你喜欢
  • 2020-09-21
  • 2010-12-07
  • 2010-12-26
  • 1970-01-01
  • 2011-06-05
  • 2023-03-07
  • 2011-06-02
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多