Chr*_*ris 5 c# linq linq-to-sql
LINQ to SQL用于在我的代码中调用一些sprocs,我需要找到在我的数据库调用中添加重试机制的方法...
using (MyDataContext dc = new MyDataContext())
{
int result = -1; //denote failure
int count = 0;
while ((result < 0) && (count < MAX_RETRIES))
{
result = dc.myStoredProc1(...);
count++;
}
result = -1;
count = 0;
while ((result < 0) && (count < MAX_RETRIES))
{
result = dc.myStoredProc2(...);
count++;
}
...
...
}
Run Code Online (Sandbox Code Playgroud)
不确定上面的代码是否正确或是否有任何复杂性.
MAX_RETRIES到达后抛出一个异常会很好,但我不知道如何以及在哪里适当地抛出它们:-)
任何帮助赞赏.
如果数据库超时,它不太可能在几毫秒后及时响应。
按照您的建议在紧密循环中重试可能会使情况变得更糟,因为您会给数据库服务器带来过度的负担,并且会占用调用代码中的线程。在每次重试之间引入等待时间会更安全。
对于更高级的场景,您可以考虑渐进式等待模式,在开始时更频繁地重试,然后如果仍然超时,则间隔越来越长。
您可能还想研究《Release It!》一书中的断路器设计模式。,以及该书中描述的许多其他模式和反模式。
状态模式非常适合实现断路器。
归档时间: |
|
查看次数: |
1343 次 |
最近记录: |