我有一個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. 防止多次執行JavaScript函數
- 2. node.io:作業完成後,再次執行
- 3. 等待完成,然後再執行下一個任務
- 4. 防止多次執行
- 5. 2個函數完成後在JQuery中執行一個函數
- 6. 如何依次執行多個函數
- 7. Unity/C#:如何在另一個函數完成其執行後執行一個函數?
- 8. Swift函數在另一個函數完成後執行
- 9. 上一個功能運行完成後執行一個功能
- 10. 防止用戶執行兩次動作
- 11. 上一個函數完成之前執行的Javascript函數
- 12. jquery ajax調用完成後執行一次函數
- 13. 如何調用一個函數childsnapshot完成執行
- 14. 每秒執行一次任務,完成後執行另一個任務
- 15. 第一次完成後執行jQuery函數
- 16. 上一個命令完成後執行下一個命令
- 17. JavaScript執行順序 - 運行this(),然後在this()完成時執行那個()?
- 18. cleartimeout函數完成後執行(jQuery)
- 19. 防止設備多次執行操作
- 20. 防止多次執行可觀察
- 21. 直到上一個事件完成才執行函數(單擊)
- 22. Javascript:在用戶完成滾動後執行一個動作
- 23. jquery:另一個完成時執行一個函數
- 24. 不止一次執行jquery函數
- 25. VB.NET執行一個用戶控件上的一個子
- 26. 一次只執行1個POST函數
- 27. 執行一個JavaScript函數十次
- 28. 如何防止前一個事件的執行,直到最後通話完畢
- 29. Installshield運行EXE然後等待完成,然後再運行另一個
- 30. 如何使用swapcontext()恢復執行一個函數(而不是再次啓動)?
數據庫鎖定是一個相當寬泛的主題使用它的每一個。你可能會發現靈感是像這樣的文章(https://www.codeproject.com/Articles/114262/6-ways-of-doing-locking-in-NET-Pessimistic-and-opt)。 –
賠率是你不需要防止在第一次。什麼原因你需要這個功能? –