我在线程#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
最明智的方法是什么?
答案 0 :(得分:3)
使用AutoResetEvent
或ManualResetEvent
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
}
答案 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);
}