none
什么情况下,使用 try{} finally {} ,try{} 里面会是空的代码段? RRS feed

  • 问题

  •  

    在.NET Framework中,System.Threading.TimerBase 类的 Dispose() 的实现源代码如下:

     

     

     

    [ReliabilityContract(Consistency.WillNotCorruptState, Cer.MayFail)]
    internal bool Dispose(WaitHandle notifyObject)
    {
        bool status = false;
        bool bLockTaken = false;
        RuntimeHelpers.PrepareConstrainedRegions();
    
        try {
        }
        finally {
            do {
                if (Interlocked.CompareExchange(ref m_lock, 1, 0) == 0) {
                    bLockTaken = true;
                    try {
                        status = DeleteTimerNative(notifyObject.SafeWaitHandle);
                    }
                    finally {
                        m_lock = 0;
                    }
                }
                Thread.SpinWait(1);
                // yield to processor
            }
            while (!bLockTaken);
            GC.SuppressFinalize(this);
        }
    
        return status;
    }
    

     

    这里用到了一个 try{} catch{} 代码段,而其中的 try{} 是空的。

     

    为什么?在什么情况下,才会使用一个空的 try{} 代码段?

     

    PS: 感兴趣的筒子可以用 Reflector 自己看.NET Framework源代码。

     

     


    MCPD (Windows & Web)
    2010年4月3日 9:31

答案

全部回复