作者热门文章
- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我有一个函数,只有在从异步函数接收到回调时才需要执行。
喜欢
我调用异步函数 Stop()
,然后不久我调用异步函数 Start()
。
收到 Stop CallBack 之前的问题 Start()
被调用,因此我遇到了问题。我也不能将两个函数的调用分开,就像我不能这样做一样。:
public void SomeFunction()
{
Stop();
}
public void Stop_CallBack(eventargs e)
{
Start();
}
我必须这样做:
public void SomeFunction()
{
Stop();
//Do something;
Start();
}
但在我收到 Stop 回调之前,我的 start() 函数已执行,因此给我带来了问题。
谁能帮我解决这个问题。
最佳答案
这是您想要使用等待句柄的时候。以下是展示一种方法的简短代码示例:
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();
}
}
关于c# - 如何让线程休眠直到收到异步函数的回调?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6306168/
我是一名优秀的程序员,十分优秀!