CurrentThread 和 ManagedThreadId 都是内部调用属性,因此值检索由框架本身处理。由于它们是属性,而不是方法,因此可以合理地假设它们可以被快速访问并且没有必要存储它们,除非您将它们置于具有大量迭代的循环中。
public extern int ManagedThreadId
{
[__DynamicallyInvokable, ReliabilityContract(Consistency.WillNotCorruptState, Cer.Success), SecuritySafeCritical]
[MethodImpl(MethodImplOptions.InternalCall)]
get;
}
如果您关心使用此属性进行日志记录,我们可以看看流行的日志记录框架(如 NLog)如何使用它。原来,它并没有缓存它,而是直接使用它:
namespace NLog.LayoutRenderers
{
public class ThreadIdLayoutRenderer : LayoutRenderer
{
protected override void Append(StringBuilder builder, LogEventInfo logEvent)
{
builder.Append(Thread.CurrentThread.ManagedThreadId.ToString(CultureInfo.InvariantCulture));
}
}
}