【发布时间】:2011-11-04 21:12:17
【问题描述】:
是否仍然需要在使用异步 (AsyncCtpLibrary.dll) 调用的方法中对 SQL Compact 数据库等资源使用 lock 关键字?正如我从 Anders 的演讲中了解到的那样,异步处理都发生在同一个线程中,所以它们不应该是必需的,还是我错了?目前我在互联网上的任何地方都找不到这方面的任何信息。
谢谢
【问题讨论】:
-
如果异步线程的多个实例可能发生,我想这将是必需的。否则理论上您可以尝试更新相同的行/列,最终结果将是竞争条件。有人可能会争辩说,您只是在使用异步方法之前使用了锁。
-
我对 SQL Compact 数据库一无所知,但我认为这与运行任何线程的正确性无关。如果以前需要一个互斥锁来安全地重入,那么它现在可能需要一个互斥锁来安全地重入,无论是一个线程还是多个线程都在进行重新进入。
-
我所说的异步线程的多个实例的意思是在短时间内多次执行相同和/或相似的查询。我还应该补充一下,目前还没有 C# 5.0。 Dev Preview 中有 C# 4.5,ASYNC CTP 将成为未来 C# 修订版的一部分。