前十几天和网友聊天的时候,他把 ThreadwiseSingleton 发给了我,我随后改写成泛型类。事实上,它基于 Threadslot 构建,因此达到了线程隔离的效果。您需要传入一个 Func(Of TResult) 完成初始化的工作。如果您的类中含有非托管资源,并无法预见可能的错误时,请使用一个 Try...Finally... 包裹将要运行的程序。同时感到抱歉的是,拖延了很久很久才发出来。
Imports System.Threading
'''
''' 一个线程隔离的 Singleton。
'''
Public Class ThreadwiseSingletonClass ThreadwiseSingleton(Of T As IDisposable)
Private Shared _Factory As Func(Of T)
'''
''' 获取构建此实例的工厂类。
'''
Public Shared Property Factory()Property Factory() As Func(Of T)
Get
Return _Factory
End Get
Set(ByVal value As Func(Of T))
_Factory = value
End Set
End Property
'''
''' 获得线程中的实例。
'''
Public Shared ReadOnly Property Instance()Property Instance() As T
Get
Dim threadSlot As LocalDataStoreSlot = Thread.GetNamedDataSlot(GetType(T).ToString)
Dim threadSlotObj As Object = Thread.GetData(threadSlot)
If threadSlotObj Is Nothing Then
'Create singleton instance
Dim ins As T = Factory.Invoke
Thread.SetData(threadSlot, ins)
Return ins
Else
Return DirectCast(threadSlotObj, T)
End If
End Get
End Property
'''
''' 私有的构造函数。
'''
Private Sub New()Sub New()
End Sub
'''
''' 释放此 Singleton 实例使用的资源。请不要直接调用 Instance.Dispose()。
'''
Public Shared Sub Dispose()Sub Dispose()
Instance.Dispose()
'放空槽
Dim threadSlot As LocalDataStoreSlot = Thread.GetNamedDataSlot(GetType(T).ToString)
Thread.SetData(threadSlot, Nothing)
End Sub
End Class
【VisualBasic构建线程安全的Singleton】相关文章:
2025年外省高中学业水平合格性考试成绩转入江苏认定的通告公布05-09
Vb中控件的自动排列05-09
写未来的作文300字05-09
Our Mother Is the Same 我们的妈妈是一样的05-09
小学父爱的作文600字05-09
汪涵讲述小时候成长经历:鸡毛掸子的故事05-09
关于清明节的英语作文:清明节05-09
儿童舞蹈教程:国标新手上路05-09
2021湖北黄冈市浠水县基层医疗卫生机构专项招聘医务人员资格审查公告05-09
