现在的位置: 首页 > 综合 > 正文

.NET Framework体贴之处点滴 – Thread Synchronization – Class level

2013年02月23日 ⁄ 综合 ⁄ 共 746字 ⁄ 字号 评论关闭

说的是Framework如何体贴程序员,而非C#语言。

 

这是Framework对Concurrency相关下的细微功夫:  

 using System.Runtime.Remoting.Contexts;

   [Synchronization]          //体贴不?
   public class MyClass : ContextBoundObject
{
public MyClass( )
{}


public void DoSomething( )
{}


//Other methods and data members
}

这里通过[Synchronization]精彩地实现了类一级的多线程同步。

 

替代的方案有三个,比较如下:

1. 使用C#提供的lock(参考C#体贴之处点滴 - lock)。

    由于lock属于方法一级的,用来实现类一级的同步访问,就显得太罗嗦了。

2. 写成WCF service。

  则同样可以通过配置InstanceContextMode 和ConcurrencyMode来实现,也很酷,但是service不一定是所有场合都合适的。

3. 通过WaitHandle及其子类来手动进行同步控制。

    除了Monitor因为C#的语言糖衣包装了一下(即第一方案),比较轻松,其它的几个类的使用还是蛮费劲的,而且需要对Concurrency相关知识有较好地理解。

 

总而言之,[Synchronization] 最体贴了。当然这个方案也不是毫无代价的:

1. 不支持静态类。

2. 必须继承ContextBoundObject,因为这是耍interception戏法的基础。

3. Interception戏法是有开销的。

 

(按:code source from <<Programming .NET Components>> 2nd.Edition Juval Lowy)

 

 

抱歉!评论已关闭.