Jer*_*emy 1 .net c# asynchronous
我有一个调用异步方法的方法,以及异步方法完成时触发的回调.
我希望我的方法看起来是同步的,所以我创建了一个AutoResetEvent,称为asyncrhonous方法,在AutoResetEvent实例上调用WaitOne(),我在回调方法中调用Set().像这样的东西(本例简化):
private System.Threading.AutoResetEvent waitRun_m;
public void RunSynchronous()
{
waitRun_m = new System.Threading.AutoResetEvent(false);
CallAsynchronousMethod();
waitRun_m.WaitOne();
}
private void Callback()
{
waitRun_m.Set();
}
Run Code Online (Sandbox Code Playgroud)
现在,是否可以在调用WaitOne()之前完成对CallAsynchronousMethod的调用 - 导致在WaitOne()之前调用Set().有没有更好的方法来做到这一点,以避免这个潜在的问题?
我相信这会回答你的问题:
调用Set信号AutoResetEvent释放等待线程.AutoResetEvent保持信号状态,直到释放单个等待线程,然后自动返回到非信号状态.如果没有线程在等待,则状态将无限期地发出信号.
但是,您必须小心,因为现在RunSynchronous看起来不是线程安全的.如果两个不同的线程以重叠方式调用它,那么一切都会破裂.