簡體   English   中英

如何等待方法開始和完成?

[英]How to wait until a method is started & finished?

我有在線程#1上運行的方法A。

我也有方法B線程#2上運行。

方法A將一個函數C(接收對象值並返回布爾值的方法)寫入共享對象,該函數應通過方法B在某個事件上執行。(方法B是永遠運行的TCP偵聽器方法)

我希望方法A將一直等到該事件發生並且C完成為止。 當前,它是通過基於Sleep的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

實現這一目標的最明智的方法是什么?

使用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/

使用鎖和Monitor類。

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

在任務方法的末尾使用Pulse可以“喚醒”正在等待的線程。

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM