2009-05-15 15 views
49

Mam trochę kodu, w którym używam obiektu statycznego wątku w języku C#.ThreadStatic zmodyfikowany za pomocą statycznego C#

[ThreadStatic] 
private DataContext connection 

Zastanawiałem się, w tym przypadku, co jeśli jakichkolwiek zmian byłoby uzyskać jeśli mogę umieścić statyczny modyfikator na gwincie statycznej kontekście?

[ThreadStatic] 
private static DataContext connection 

Przy pierwszym stanowisku byłaby jedna kopia kontekstu na wystąpienie w jednym wątku, a druga tylko jedna kopia na wątek?

+1

+1 za dobre pytanie. Nigdy bym o tym nie pomyślał. –

+0

Dzięki za edycję itsmatt! –

Odpowiedz

53

Urządzenie ThreadStaticAttribute jest przeznaczone wyłącznie do użytku z zmiennymi statycznymi, takimi jak MSDN points out. Jeśli używasz go na zmiennej instancji, podejrzewam, że zrobi to dokładnie nic.

+1

Ktoś świadomy jakiejkolwiek dokumentacji opisującej oficjalne zasady dotyczące tego, co ma robić? Jeśli nie powinno się go używać w ten sposób, czy nie powinien powodować błędu kompilacji, czy też atrybuty nie powodują błędów kompilacji? – Catskul

+6

Byłoby wspaniale, gdyby był to błąd kompilatora, ponieważ właśnie spędziłem kilka godzin na śledzeniu tajemniczego błędu związanego z wątkiem, który okazał się spowodowany użyciem [ThreadStatic] w polu instancji, a tym samym braku efekt ... –

+0

@romkyns same tutaj ... właśnie przybity błąd spowodowany przez [ThreadStatic] w polu instancji. – chakrit

8

W pierwszym przypadku zostanie to prawdopodobnie zignorowane, natomiast w drugim przypadku poprawne, po jednym wystąpieniu w wątku.

6

MSDN mówi:

Wskazuje, że wartość statycznej dziedzinie jest unikalny dla każdego wątku.

Więc myślę, że najpierw przypadek jest nieprawidłowy ... atrybut prawdopodobnie zostanie zignorowany

Powiązane problemy