Frage

Background Fäden wiederverwendet?

Insbesondere dann, wenn ich einen benannten Datenschlitz (Thread-Local Storage) während der DoWork () -Methode eines Background gesetzt ist, wird der Wert dieses Datenschlitz bestehen bleiben, möglicherweise findet einiger anderer Thread zu einem späteren Zeitpunkt sein werden?

ich hätte nicht gedacht, so, aber ich habe diesen Fehler ...

EDIT: Dieser Blog-Eintrag schlägt dass Background verwendet eine Thread , was bedeutet, dass Threads em <> sind wiederverwendet. So wird die Frage; Sie wiederverwendet Threads potentiell Thread-Local Storage zwischen Anrufungen bestehen?

War es hilfreich?

Lösung

Wenn der Thread-Pool einen Thread wieder verwendet, es werden nicht die Daten in lokalen Threadspeicher oder in Bereichen, die mit dem Attribut Thread gekennzeichnet sind. Daher werden die Daten, die in dem Thread-Lokalspeicher durch ein Verfahren angebracht wird, kann auf ein beliebiges anderes Verfahren ausgesetzt werden, die von der gleichen Thread-Pool-Thread ausgeführt wird. Ein Verfahren, das ein Feld zugreift, die mit dem Thread Attribut gekennzeichnet ist könnten verschiedene Daten auftreten, je nachdem, welche Thread-Pool-Thread führt es aus.

  

Quelle:    http://msdn.microsoft.com/en-us/library /system.threading.threadpool.aspx

Andere Tipps

Brauchte die Quelle (oder über Reflector) zu überprüfen, dies zu bestimmen, ob es nicht in MSDN angegeben ist.

Wenn es nicht angegeben ist, können Sie sich nicht auf das aktuelle Verhalten in einer zukünftigen Version von .NET nicht ändern.

Edit: Sieht aus wie es den Thread-Pool verwendet, so Threads wird wieder verwendet werden

.
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top