为什么将try {}最终{}与空的try块一起使用?
我注意到System.Threading.TimerBase.Dispose()该方法中有一个try{}
finally{}块,但try{}为空。
try{} finally{}与空值一起使用是否有任何价值try?
http://labs.developerfusion.co.uk/SourceViewer/browse.aspx?assembly=SSCLI&namespace=System.Threading&type=TimerBase
[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;
}
回答:
从http://blog.somecreativity.com/2008/04/10/the-empty-try-block-
mystery/:
这种方法可以防止Thread.Abort调用中断处理。Thread.Abort的MSDN页面说:“未执行的最终块在线程中止之前已执行”。因此,为了确保即使有人在线程上调用Abort中断了您的线程而在中间中断了处理,您也可以将所有代码放在finally块中(另一种方法是将代码写入“
catch”块中,以确定在“尝试”被Abort打断之前您在哪里,然后从那里继续进行)。
以上是 为什么将try {}最终{}与空的try块一起使用? 的全部内容, 来源链接: utcz.com/qa/412080.html






