用C# 2.0的朋友可能会经常使用匿名方法(Anonymous Methods)和匿名委托(Anonymous Delegate)。在这里我说2个比较常用的应用环境。
1、Retry机制
C#和C++, Java一样拥有异常处理机制,我相信很多朋友和我一样,第一次接触异常的时候,都非常希望异常能够像内核捕获内存page fault异常一样类似的拥有Retry(重试)的机制,很可惜这些语言中都没有给我们提供Retry机制。
当然原因有很多,比如如果重试,那么到底是重试哪部分代码呢?是try{}catch{}中的代码?还是发生异常那一行的代码?重试多少次?重试之间是不是要再等一会儿?如果再失败怎么处理?而且如果不同层有Retry,那么会出现Retry次数以乘法形式递增(底层Retry 5次,高层Retry 3次,那么实际Retry次数将达到15次)。
在应用环境中的Retry不比内核,处理后只需要重新执行产生异常的那一条指令,应用环境的要求要更复杂。
可是在实际应用中,特别是面对网络应用时候,有可能会有大量的类似于TimeOut(超时)、或者外部资源被临时占用、暂时性的设备较忙的异常产生,只要再重试几次就会正常。如果此时将raise异常,并且扔向更高层,显然是不太明智的。于是就开始有人用有限次循环的办法来模拟Retry。典型的代码如下:
public
static
void
TraditionalSolution()

...
{
int retryTimes = 10;
for (int i = 0; i < retryTimes; ++i)

...{
try

...{
// do something here,
// such as call WebClient to fetch a webpage.
// the code might throw an exception.
break;
}
catch (Exception)

...{
if (i == retryTimes - 1)

...{
throw;

本文介绍了如何使用C#的匿名方法实现Retry机制,以处理可能出现的网络异常,以及如何在WinForm中进行线程安全的Control访问。Retry机制通过循环和异常处理,避免频繁的异常抛出,而线程安全访问则是通过一个通用的DoThreadSafe函数,利用匿名方法避免了多次写入同一操作,提高了代码的优雅性和可维护性。
最低0.47元/天 解锁文章
345

被折叠的 条评论
为什么被折叠?



