【发布时间】:2017-04-12 16:45:40
【问题描述】:
当它显示以下内容时,我正在使用 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#。为什么要这样写?如果你摆脱了 try/finally 并将 return 移到最后有什么区别?
我了解 Reflector 的工作原理,并且这可能不是原始来源。如果您认为是这样,您能否建议原始来源可能是什么?
【问题讨论】:
-
您可能想查看该部分代码的 IL;我的猜测是反射器以一种有趣的方式反编译使用了一些微优化。
标签: c# threadpool idioms