Why is this an issue?
When you annotate a field with the ThreadStatic
attribute, it is an indication that the value of this field is unique for each thread. But if you don’t mark the field as static,
then the ThreadStatic attribute is ignored.
The ThreadStatic attribute should either be removed or replaced with the use of ThreadLocal<T> class, which gives a similar
behavior for non-static fields.
How to fix it
Code examples
Noncompliant code example
public class MyClass
{
[ThreadStatic] // Noncompliant
private int count = 0;
// ...
}
Compliant solution
public class MyClass
{
private int count = 0;
// ...
}
or
public class MyClass
{
private readonly ThreadLocal<int> count = new ThreadLocal<int>();
public int Count
{
get { return count.Value; }
set { count.Value = value; }
}
// ...
}
Resources
Documentation
- Microsoft Learn - ThreadStaticAttribute Class
- Microsoft Learn - ThreadLocal<T> Class