用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;