[英]How to Sleep a thread until callback for asynchronous function is received?
我有一個 function,只有在從異步 function 收到回調時才需要執行它。
喜歡
我調用異步 function Stop()
,不久之后我調用異步 function Start()
。
收到 Stop CallBack 之前的問題Start()
被調用,因此我遇到了問題。 我也不能分開調用兩個函數就像我不能這樣做一樣:
public void SomeFunction()
{
Stop();
}
public void Stop_CallBack(eventargs e)
{
Start();
}
我必須這樣做:
public void SomeFunction()
{
Stop();
//Do something;
Start();
}
但是在我收到 Stop 回調之前,我的 start() function 被執行,從而給我帶來了問題。
誰能幫我解決這個問題。
這是您想要使用等待句柄的時候。 這是一個簡短的代碼示例,用於展示一種方法:
class AsyncDemo
{
AutoResetEvent stopWaitHandle = new AutoResetEvent(false);
public void SomeFunction()
{
Stop();
stopWaitHandle.WaitOne(); // wait for callback
Start();
}
private void Start()
{
// do something
}
private void Stop()
{
// This task simulates an asynchronous call that will invoke
// Stop_Callback upon completion. In real code you will probably
// have something like this instead:
//
// someObject.DoSomethingAsync("input", Stop_Callback);
//
new Task(() =>
{
Thread.Sleep(500);
Stop_Callback(); // invoke the callback
}).Start();
}
private void Stop_Callback()
{
// signal the wait handle
stopWaitHandle.Set();
}
}
由於這些看起來像成員函數,您可以添加一個事件成員變量( ManualResetEvent
或AutoResetEvent
。然后在Stop()
方法中將事件設置為已發出信號。在調用 Stop() 和 Start() 之間等待為事件。
private AutoResetEvent _stopped = new AutoResetEvent(false);
public void SomeFunction()
{
Stop();
_stopped.WaitOne();
Start();
}
在停止 function 你會做
private void Stop()
{
try
{
// Your code that does something to stop
}
finally
{
_stopped.Set(); // This signals the event
}
}
如果使用ManualResetEvent
-
private ManualResetEvent _stopped = new ManualResetEvent(false);
public void SomeFunction()
{
Stop();
_stopped.WaitOne();
Start();
}
private void Stop()
{
try
{
// Your code that does something to stop
}
finally
{
_stopped.Set(); // This signals the event
}
}
private void Start()
{
_stopped.Reset();
// Your other start code here
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.