Was ist der beste Weg, um ein kleines Stück Daten zwischen verschiedenen ThreadPool-Threads in diesem Fall zu übergeben?
Mit dem logischen Anrufkontext über die CallContext
Klasse. Es stellt zwei statische Methoden: LogicalSetData
und LogicalGetData
. Der Aufruf Kontext wird über das ExecutionContext
gelagert und serialisiert, die auch von dem Sync-Kontext zuständig ist, etc.
Die Verwendung dieser Klasse hat zwei Einschränkungen:
-
Sie sind auf die Verwendung von .NET 4.5 und höher beschränkt
-
Der logische Aufrufkontext verwendet die Semantik zum Kopieren und Schreiben und führt eine flache Kopie durch, sobald die Daten mutiert sind. Das heißt, Sie sollten nur unveränderliche Daten verwenden, da die Referenzen über mehrere Threads gemeinsam genutzt werden.
können
Zu beachten ist, dass CallContext
erst initialisiert wird, wenn Sie es aufrufen. Dies bedeutet, dass Sie bei der Verwendung aufgrund der Copy-on-Write-Funktion etwas Overhead benötigen.
Mehr dazu finden Sie in einem Beitrag von Stephan Cleary namens Implicit Asynchroner Kontext