如何等待方法开始&完了吗?

时间:2014-07-17 07:10:20

标签: c# multithreading asynchronous

我在线程#1 上运行方法A

我还有方法B 线程#2 上运行。

方法A向共享对象写入一个函数C(接收对象值并返回布尔值的方法),该函数应该通过方法B在某个事件上执行。(方法B是一个永远运行的TCP侦听器方法)< / p>

我希望方法A将等到该事件发生并且C完成。目前它采用基于睡眠的for循环实现(具有超时等)。

让我让自己更清楚,流程是这样的:

方法B(在线程#2上):while(true) { process data, if data has x then someFunc(..) }

方法A(在线程#1上):someFunc = (obj) => {...}; wait until someFunc is executed by B & is finished; do more stuff

最明智的方法是什么?

2 个答案:

答案 0 :(得分:3)

使用AutoResetEventManualResetEvent

private AutoResetEvent signal = new AutoResetEvent(false);
void MethodB()
{
   //process data
   if(condition)
   {
       signal.Set();//Say you're finished
   }
}

void MethodA()
{
    //Do something

    signal.WaitOne();//Wait for the signal
    //Here do whatever you want. We received signal from MethodB
}

我建议阅读http://www.albahari.com/threading/

答案 1 :(得分:1)

使用锁和Monitor类。

private object _lock = new object();
...
private void StartTaskAndWait()
{
   lock (_lock)
   {
      new Task(DoSomething).Start();
      Monitor.Wait()
   }
}

在任务方法结束时使用Pulse来“唤醒”#34;等待的线程。

lock (_lock)
{
   Monitor.Pulse(_lock);
}