Semantyka implementacji wątku statycznego jest poniżej poziomu IL, w kompilatorze jit .NET. Kompilatory, które emitują do IL, takie jak VB.NET i C #, nie muszą nic wiedzieć o Win32 TLS, aby emitować kod IL, który może odczytywać i zapisywać zmienną, która ma atrybut ThreadStatic. O ile C # wie, nie ma nic specjalnego w tej zmiennej - jest to tylko lokalizacja do czytania i pisania. Fakt, że ma przypisany atrybut, nie ma znaczenia dla C #. C # musi tylko wiedzieć, aby emitować instrukcje odczytu lub zapisu IL dla tej nazwy symbolu.
„Podnoszenie ciężarów” jest wykonywane przez rdzeń środowiska CLR, które jest odpowiedzialne za sprawienie, by IL działał na określonej architekturze sprzętowej.
To by również wyjaśniało, dlaczego umieszczenie atrybutu na niewłaściwym (niestatycznym) symbolu nie powoduje reakcji kompilatora. Kompilator nie wie, jakiej specjalnej semantyki wymaga atrybut. Jednak narzędzia do analizy kodu, takie jak FX / Cop, powinny o tym wiedzieć.
Można na to spojrzeć inaczej: CIL definiuje zestaw zakresów pamięci: pamięć statyczną (globalną), pamięć składową i pamięć stosową. TLS nie znajduje się na tej liście, bardzo prawdopodobne, ponieważ TLS nie musi znajdować się na tej liście. Jeśli instrukcje odczytu i zapisu IL są wystarczające, aby uzyskać dostęp do TLS, gdy symbol jest oznaczony atrybutem TLS, dlaczego IL miałby mieć jakąś specjalną reprezentację lub sposób traktowania TLS? To nie jest potrzebne.