回答

收藏

重试捕获块?

技术问答 技术问答 252 人阅读 | 0 人回复 | 2023-09-14

如何在catch块中实现代码?9 ^# i7 G& k3 c* ?
  try
2 F& h" d* Q; W( @0 N( e, A    {
, s+ M! v8 `3 W" J  k8 k       // Call a MS SQL stored procedure (MS SQL 2000)1 J0 U+ n( g' b# u/ m
       // Stored Procedure may deadlock 9 F) J# ], \  t) H: d* A, ~
    }
& D1 l* w4 Y( r) P9 ^% `; ^! A    catch
( C1 @# x: f0 T6 N3 K6 ?. _# ]    {* G7 [- z3 n) ?$ w
       // if deadlocked Call a MS SQL stored procedure (may deadlock again), R$ B1 u3 @( P$ p
       // If deadlocked, keep trying until stored procedure executes4 `5 R7 e$ z6 ~
    }
+ B' Z" q' P( L/ ~" O3 t    finally
7 ~! c6 }7 ]& g. r* Y; z    {
' M$ v& y7 ^3 m6 X4 i    }* m8 t0 m' @; i& C6 d2 `
                1 @1 P/ K/ J7 b( e2 Y' a8 X6 c2 y
解决方案:$ f% S$ }% j# f" L; z
                0 g7 e/ _5 ?0 N  X& h/ l1 w

7 n' `4 M; s7 m. Y  ^; Z* }5 K2 ?  X& N4 b
                不建议这样做,这可能会在程序中引起严重的问题。例如,如果数据库关闭了怎么办?5 w6 C$ {0 w# r. J1 a+ }
但是,这是循环执行的方法:
* _3 j+ i' o) ^( t3 C6 Lfor(int attempts = 0; attempts 更新: 令人失望的先生在下面的评论中提到:该Thread.Sleep方法将执行暂停指定的毫秒数。没有错误是完全随机的,大多数错误只能通过
5 x4 I; f: x% A2 z. b再次尝试 才能起作用,因为两次尝试之间的时间有所变化。暂停执行线程将为发生这种情况提供更大的机会(例如,数据库引擎有更多的启动时间)。
分享到:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则