Я использовал Reflector для просмотра некоторых источников .Net ThreadPool, когда он показал это:
private static bool QueueUserWorkItemHelper(WaitCallback callBack, object state, ref StackCrawlMark stackMark, bool compressStack)
{
bool flag = true;
if (callBack == null)
{
throw new ArgumentNullException("WaitCallback");
}
EnsureVMInitialized();
if (ThreadPoolGlobals.useNewWorkerPool)
{
try
{
return flag;
}
finally
{
QueueUserWorkItemCallback callback = new QueueUserWorkItemCallback(callBack, state, compressStack, ref stackMark);
ThreadPoolGlobals.workQueue.Enqueue(callback, true);
flag = true;
}
}
// code below here removed
}
Блок try / finally показался мне очень однотипным C #. Зачем писать это так? Какая разница, если вы избавились от попытки / наконец и перенесли возврат в конец?
Я понимаю, как работает Reflector и что это может быть не исходный источник. Если вы считаете, что это так, то можете ли вы предположить, каким был первоначальный источник?