【发布时间】:2013-08-20 11:14:33
【问题描述】:
所以,我有一个方法,其中包含对服务器的异步调用。 该代码是从 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 次吗?
【问题讨论】:
-
您使用的是什么第三方工具?
标签: c# multithreading windows-phone-7 thread-safety