Laden...

ThreadLocal Werte in neuen Thread kopieren

Erstellt von Wax vor 8 Jahren Letzter Beitrag vor 8 Jahren 1.129 Views
Wax Themenstarter:in
731 Beiträge seit 2006
vor 8 Jahren
ThreadLocal Werte in neuen Thread kopieren

Hi zusammen,

ich habe zur Zeit das Problem, dass meine Anwendung ThreadLocal-Werte vorhält und der Anwendungscode hin und wieder auf diese Werte zugreift. Das funktioniert auch alles wunderbar, solange halt kein neuer Thread erstellt wird.

Nur leider lässt sich das nicht immer vermeiden und dann habe ich ein Problem!

Zur Zeit biete ich für solche Zwecke einen "TaskHelper" an, der sich darum kümmert die Werte des alten Threads in den neuen Thread zu kopieren, bevor der eigentliche Task ausgeführt wird.

Leider ist das sehr fehleranfällig, da nicht jeder diesen Code benutzt oder aber mit async/await arbeitet. Da kommt es ja auch schon mal vor, dass ein anderer Thread verwendet wird und ruck zuck bin ich wieder bei meinem Problem.

Fragen:

  • Hattet ihr vielleicht auch schon mal ein ähnliches Problem und wie habt ihr es gelöst?
  • Gibt es vielleicht noch eine weitere (globalere) Möglichkeit als ThreadLocal? So etwas wie ContextLocal? 😉

Gruß,
wax

1.029 Beiträge seit 2010
vor 8 Jahren

Hi,

was spricht denn gegen die Implementierung eines (threadsicheren) Singletons?

LF

Wax Themenstarter:in
731 Beiträge seit 2006
vor 8 Jahren

Hi Taipi88,

ich benötige pro Thread eigene Werte, deswegen ThreadLocal<T>.

Ich sehe da gerade keine Singleton-Situation.

Oder habe ich nur Tomaten auf den Augen?

MfG,
wax

1.378 Beiträge seit 2006
vor 8 Jahren

Wie wärs mit einem Singleton der ThreadLocal im Hintergrund verwendet? ThreadLocal hat ja die Eigenschaft IsValueCreated, mit der du im Singleton dann prüfen könntest, ob es sich um einen neuen Thread handlet und ihn gleich dort initialisieren.

Lg, XXX

Wax Themenstarter:in
731 Beiträge seit 2006
vor 8 Jahren

Ich hab's jetzt mittels CallContext.LogicalGetData() gelöst.

Implicit Async Context ("AsyncLocal") mal mehr Infos zu dem Thema.

Also bisher sieht alles gut aus, es beunruhigt mich nur etwas, dass der Code aus dem Remoting-Namespace kommt.

MfG,
wax