ThreadStatic attribute, iş parçacığı başına bir statik değişkeni bildirir. Bu tür değişkenleri doğru şekilde atmak için kolay bir desen biliyor musunuz?ThreadStatic nesnelerinin deterministik atılması
Daha önce kullandığımız ThreadStatic bir ThreadContextManager'tır. Her iş parçacığına tüm iş parçacığına özgü bilgileri koruyan bir ThreadContext tahsis edildi. Bazı iplikler ürettik ve işlerine izin verdik. Daha sonra, hepsi bittiğinde, ThreadContentManager'ı bertaraf ettik, ki bu da tüm bağlamları, eğer tek kullanımlık ise, bertaraf ettik.
Bu deseni ThreadStatic nesnelerine çevirmenin hemen bir yolunu göremiyorum. Nesneler nihai olarak bertaraf edilecektir, çünkü dişler ölür ve hiçbir şey onlara referans olmaz. Bununla birlikte, mümkün olduğunda deterministik imhayı tercih ederiz.
Güncelleme
Gerçekten doğrudan konuları kontrol etmiyoruz - Ben görevleri yapan bir ThreadPool'da sahip Microsoft CCR, kullanıyorum. Tüm görevler bittiğinde, Dispatcher'ı (threadpool'u tutan) imha ediyorum. Mesele şu ki - bir iş parçacığının ana işlevinin sonunda bir şey yapma şansı bulamıyorum - bu yüzden iş parçacığının çalışmasının sonunda işleri elimden atamıyorum. İş parçacığının statik nesnelerine iş parçacığının dışından bir şekilde erişebilir miyim?
Her görevden sonra temizlemek istemiyorum. Threadpool'umdaki herhangi bir iş parçacığı sırayla birçok görevi yerine getirir. Bağlamın nedeni, görev başına veri yapılarının pahalı tahsisini kurtarmaktır. Bu sadece tüm iş parçacığı bittikten sonra temizleyebileceğim anlamına gelir. – ripper234