CA1840: Use Environment.CurrentManagedThreadId instead of Thread.CurrentThread.ManagedThreadId

Property Value
Rule ID CA1840
Title Use Environment.CurrentManagedThreadId instead of Thread.CurrentThread.ManagedThreadId
Category Performance
Fix is breaking or non-breaking Non-breaking
Enabled by default in .NET 8 As suggestion

Cause

Using Thread.CurrentThread.ManagedThreadId for getting the current managed thread ID instead of System.Environment.CurrentManagedThreadId.

Rule description

System.Environment.CurrentManagedThreadId is a compact and efficient replacement of the Thread.CurrentThread.ManagedThreadId pattern.

How to fix violations

The violation can either be fixed manually, or, in some cases, using Quick Actions to fix code in Visual Studio.

The following two code snippets show a violation of the rule and how to fix it:

using System.Threading;

class MyClass
{
    void MyMethod()
    {
        int id = Thread.CurrentThread.ManagedThreadId; // Violation occurs
    }
}
Imports System.Threading

Class MyClass
    Private Sub MyMethod()
        Dim id As Integer = Thread.CurrentThread.ManagedThreadId ' Violation occurs.
    End Function
End Class
using System.Threading;

class MyClass
{
    void MyMethod()
    {
        int id = System.Environment.CurrentManagedThreadId; // Violation fixed
    }
}
Imports System.Threading

Class MyClass
    Private Sub MyMethod()
        Dim id As Integer = System.Environment.CurrentManagedThreadId ' Violation fixed.
    End Function
End Class

Tip

A code fix is available for this rule in Visual Studio. To use it, position the cursor on the violation and press Ctrl+. (period). Choose Use 'Environment.CurrentManagedThreadId' from the list of options that's presented.

Code fix for CA1840 - Use 'Environment.CurrentManagedThreadId'

When to suppress warnings

It's safe to suppress a violation of this rule if you're not concerned about the performance impact from using Thread.CurrentThread.ManagedThreadId.

Suppress a warning

If you just want to suppress a single violation, add preprocessor directives to your source file to disable and then re-enable the rule.

#pragma warning disable CA1840
// The code that's violating the rule is on this line.
#pragma warning restore CA1840

To disable the rule for a file, folder, or project, set its severity to none in the configuration file.

[*.{cs,vb}]
dotnet_diagnostic.CA1840.severity = none

For more information, see How to suppress code analysis warnings.

See also