2009-05-15 7 views
49

Ho un codice in cui utilizzo un oggetto statico di thread in C#.ThreadStatic modificato con statico C#

[ThreadStatic] 
private DataContext connection 

mi chiedevo, in questo caso, che cosa se ogni cambiamento otterrei se metto il modificatore statico sul contesto statico filo?

[ThreadStatic] 
private static DataContext connection 

Con il primo sarebbe una copia del contesto per istanza per thread, con l'altra una sola copia per thread?

+1

+1 per buona domanda. Non ci avevo mai pensato. –

+0

Grazie per la modifica itsmatt! –

risposta

53

ThreadStaticAttribute è progettato solo per essere utilizzato su variabili statiche, come MSDN points out. Se lo si utilizza su una variabile di istanza, sospetto che farà esattamente nulla.

+1

Chiunque è al corrente di qualsiasi documentazione che descriva la politica ufficiale su cosa dovrebbe fare? Se non dovrebbe essere usato in questo modo non dovrebbe causare un errore di compilazione, o gli attributi non possono causare errori di compilazione? – Catskul

+6

Sarebbe bello se si trattasse di un errore del compilatore, perché ho passato un paio di ore a rintracciare un misterioso bug correlato al thread, che si è rivelato dovuto a [ThreadStatic] in uso su un campo di istanza e quindi senza effetto ... –

+0

@romkyns stesso qui ... appena inchiodato un bug causato da [ThreadStatic] su un campo istanza. – chakrit

8

Nel primo caso sarebbe probabilmente ignorato, mentre nel secondo caso si è corretti, un'istanza per thread.

6

MSDN dice:

Indica che il valore di un campo staticoè unico per ciascun thread.

quindi credo che si primo caso non è corretto ... l'attributo sarà probabilmente ignorato