注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

信息 灵感 创新

I? =Information,Inspiration,Innovation

 
 
 

日志

 
 
关于我

we are 5. Mathematics, Computation, Programming, Engineering, and Making fun of life.

网易考拉推荐

C#中实现原子模式  

2011-11-29 09:43:31|  分类: C# & .NET |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

所谓的原子模式指的是,不能再细分的模式,即希望一个操作无论是成功完成或者失败,都不影响状态时,这种操作就被认为是原子(atomic)的(参考C# 3.0核心编程),当一个对象因为一个未能完成的操作而进入一个不确定的状态时,这个对象就会变得不可用。这种操作其实在数据库中有很多应用,例如对数据的删除,如果半路出问题,是会进行回滚(roolback)操作的,C#中为了避类似免这种现象,可是使用try-catch-finally语句实施。

下面是一个实施的例子:

using System;
namespace Castor
{
    class Program : Object
    {
        static void Main(string[] args)
        {
            int[] A1 = new int[] { 1, 2, 3, 4, 5 };
            int[] A2 = new int[] { 1, 2, 3, int.MaxValue };
            Tester t = new Tester();
            try
            {
                t.Sum(A1);
                Console.WriteLine(t.Total);
                t.Sum(A2);
                Console.WriteLine(t.Total);
            }
            catch
            {
                Console.WriteLine(t.Total);//Total=15
            }
            Console.Read();
        }
    }

    public class Tester
    {
        public int Total;
        public void Sum(params int[] IntArray)
        {
            bool success = false;
            int OriginalTotal = Total;
            try
            {
                foreach (int i in IntArray)
                    checked { Total += i; }
                success = true;
            }
            finally
            {
                if (!success)
                    Total = OriginalTotal;
            }
        }
    }
}
当第二次操作失败的时候Total的值依旧保存为15不变,如果是一般的try操作的话,Total还会加上A2数组中的前几个值1,2,3,出现异常的时候Total的值为21。
  评论这张
 
阅读(1961)| 评论(0)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2016