我有一個Vb.Net函數向數據庫提交詳細信息,假設我想阻止多個用戶在同一時間繼續執行此功能。第二個人只有在第一個人退出該功能後纔有機會執行該功能。Vb.net - 如何防止多個用戶執行一個函數,然後再實際完成上次執行
0
A
回答
0
0
創建線程安全隊列,所有用戶將增加它們的參數和後臺進程將由一個執行與給定的參數一個函數。這種方法你不會依賴於數據庫的類型或版本。
可以使用ConcurrentQueue(Of T)實施
Public Class DetailsRepository
Private ReadOnly _queue As ConcurrentQueue(Of Object)
Private _cancellationSource As CancellationTokenSource
Private _cancellationToken As CancellationToken
Private _task As Task
Public Sub New()
_queue = New ConcurrentQueue(Of Object)()
End Sub
Public Sub Submit(arguments As Object)
queue.Enqueue(arguments);
End Sub
Public Sub Start()
_cancellationSource = new CancellationTokenSource()
_cancellationToken = _cancellationSource.Token
_task = Task.Run(AddressOf ExecuteSubmits, _cancellationToken)
End Sub
Public Sub Stop()
_cancellationSource.Cancel()
End Sub
Private Sub ExecuteSubmits()
While True
Dim argument As Object
If _queue.TryDequeue(argument) Then
' Execute database query with provided arguments
End If
If _cancellationToken.IsCancellationRequested Then
Exit While
End If
End
End Sub
End Class
在你的應用程序的入口點創建這個類的單一實例,並在您需要執行該功能
相關問題
- 1. 防止onScroll函數再次執行直到完成
- 2. 防止多次執行JavaScript函數
- 3. 如何防止javascript中的ajax函數一次執行多次
- 4. node.io:作業完成後,再次執行
- 5. 等待完成,然後再執行下一個任務
- 6. 執行exe文件一個完成,然後執行其他
- 7. 防止多次執行asynctask
- 8. 防止多次執行
- 9. 2個函數完成後在JQuery中執行一個函數
- 10. 等待兩個異步完成函數完成,然後再執行下一行代碼
- 11. 如何依次執行多個函數
- 12. 如何在另一個完成後執行javascript函數?
- 13. 一次執行後停止jquery函數
- 14. 如何在gdb中執行函數後執行一個函數?
- 15. Unity/C#:如何在另一個函數完成其執行後執行一個函數?
- 16. Swift函數在另一個函數完成後執行
- 17. 在另一個函數fadeOut()完成後執行函數
- 18. 上一個功能運行完成後執行一個功能
- 19. 防止用戶執行兩次動作
- 20. 上一個函數完成之前執行的Javascript函數
- 21. jquery ajax調用完成後執行一次函數
- 22. 如何調用一個函數childsnapshot完成執行
- 23. 第一次完成後執行方法
- 24. 每秒執行一次任務,完成後執行另一個任務
- 25. 等待事件完成後再執行另一個問題
- 26. 的Javascript無極(),然後以防止再呼叫第一次調用之前的函數執行
- 27. 如何在第一次執行後調用第二個函數?
- 28. 完成排防止AFJSONRequestOperation執行
- 29. 如何執行db.SaveChanges()然後再次更新數據庫?
- 30. 如何讓一個類不可點擊直到它執行一個函數然後再次點擊它?
數據庫鎖定是一個相當寬泛的主題使用它的每一個。你可能會發現靈感是像這樣的文章(https://www.codeproject.com/Articles/114262/6-ways-of-doing-locking-in-NET-Pessimistic-and-opt)。 –
賠率是你不需要防止在第一次。什麼原因你需要這個功能? –