所以,我有一个方法,其中包含对服务器的异步调用。该代码是从 3rd 方工具调用的,它有时会从不同的线程连续多次调用相同的方法,所以我不能影响它。
我要确定的是我的方法被调用一次,然后,另一个调用应该被忽略。
起初,我尝试使用 bool isBusy 锁定(locker),但这并不让我满意,因为仍然从第二个线程调用了几次异步请求,这足以看到 isBusy=true;
然后,我尝试了监视器
object obj = new object();
Monitor.TryEnter(obj);
try
{
var res = await _dataService.RequestServerAsync(SelectedIndex, e.StartIndex, e.Count);
****
}
finally
{
Monitor.Exit(obj);
}
但是,在 上Exit()
,我遇到了异常:
“System.Threading.SynchronizationLockException”类型的第一次机会异常
有没有其他方法可以保证代码只执行 1 次?