1
我有一个类管理自动刷新一些对象,也允许您手动刷新下面的代码。我想让它线程安全。SyncLock是否可以重复使用?
Public Function ForceRefresh() As Foo
DoRefresh()
ResetTimer()
Return Me.CurrentFoo
End Function
Private Sub DoRefresh()
Me._currentFoo = Me._retriever.GetTheFoo()
End Sub
我很想Synclock
这两种方法:
ForceRefresh
:所以我们没有得到多种消费线程试图强制刷新,并在同一时间复位定时器DoRefresh
:所以如果我们已经在尝试取回一个,我们不会尝试GetTheFoo()
。我使用System.Threading.Timer
这可能回拨任何ThreadPool
线程,单纯用一个标志,可能不适合(但也许仍然是必要的?)
...这样的:
Private _syncRoot As New Object
Public Function ForceRefresh() As Foo
Synclock _syncRoot
'Snip ...
End Synclock
End Function
Private Sub DoRefresh()
Synclock _syncRoot
'Snip ...
End Synclock
End Sub
但后来我试图Synclock
在_syncRoot
两次拨打ForceRefresh
...现在如果Synclock
是可重入,然后嵌套这些将不会是一个问题。 MSDN文档页面似乎意味着情况是这样,但没有明确说明。
注意:我要自己试一下,但是在StackOverflow上我没有看到任何关于此的内容,并认为这是一个有用的问题。
你在午餐时也打败了我;)谢谢! –