我正在编写一个利用Windows Phone的LocalDB功能的应用程序。我意识到我需要确保只有一个线程在给定数据库上执行操作,因此我创建了一个AutoResetEvent对象来协调各种线程争夺对数据库的访问权。我的代码非常类似:
class SomeClass
{
AutoResetEvent DatabaseLock = new AutoResetEvent(true);
public async void AddData(Person person)
{
await Task.Run(() =>
{
MyDataContext db = null;
try
{
this.DatabaseLock.WaitOne();
db = MyDataContext.GetInstance();
db.People.InsertOnSubmit(person);
db.SubmitChanges();
}
finally
{
if (db == null)
db.Dispose();
this.DatabaseLock.Set();
}
}
}
}
显然,这不是真正的代码,但它是相同的一般模式。无论如何,我决定在这里使用AutoResetEvent对象,正如我在多个位置在线建议的那样。但是,我倾向于使用lock {...}
语句。
有没有理由使用AutoResetEvent?与lock
对象相比,我觉得它很慢。
答案 0 :(得分:0)
当您需要向另一个帖子发出信号时,您应该使用AutoResetEvent
。
在这种情况下,您只是锁定资源,因此lock
语句将是更好的选择。