说的是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)
转载于:https://www.cnblogs.com/jamesleng/archive/2011/10/31/2229747.html