如何使用C#重试读取锁定的数据库?

如何使用C#重试读取锁定的数据库?,c#,sqlite,C#,Sqlite,我有几个C#应用程序都使用相同的SQLite数据库(包含一些用户信息)。他们中只有一个人需要写信,但所有人都必须时不时地阅读 当一个应用程序正在编写时,如果其他应用程序碰巧想要读取某些内容,我会得到数据库锁定异常 一切都很好,正如预期的那样,但我该如何进行阅读的重试呢尽管(例外)重试可能是一个幼稚而讨厌的解决方案 我在想,对于我缺少的重试,这里有一些System.Core.Sqlite选项。 谷歌给了我一些解决方案,包括复制和删除数据库或终止进程;但我认为这些都是相当。。无关的 SQLite会在

我有几个C#应用程序都使用相同的SQLite数据库(包含一些用户信息)。他们中只有一个人需要写信,但所有人都必须时不时地阅读

当一个应用程序正在编写时,如果其他应用程序碰巧想要读取某些内容,我会得到数据库锁定异常

一切都很好,正如预期的那样,但我该如何进行阅读的重试呢<代码>尽管(例外)重试可能是一个幼稚而讨厌的解决方案

我在想,对于我缺少的重试,这里有一些
System.Core.Sqlite
选项。
谷歌给了我一些解决方案,包括复制和删除数据库或终止进程;但我认为这些都是相当。。无关的

SQLite会在您设置了后自动重试。

如果可能,您可能希望使用进行调查

使用WAL模式,编写器和读取器不会相互阻塞。但是,仍然只允许一个writer,但这不是一个问题,因为您只使用单个应用程序向DB写入数据

此外,您还可以在System.Data.SQLite.SQLiteException中捕获该异常,并重复该查询,直到其正常工作:-)


如果暴力不起作用,您没有使用足够的:-)

这看起来很相关:您可以尝试超时,因为当数据库被锁定时,它将处于忙碌状态,并且可能会从辅助应用抛出超时,因此,设置一个短超时的连接,比如100ms左右。如果您想设计自己的重试逻辑,最好遵循以下伪代码模式:
for(int i=1;i