Vb.net 具有互斥对象的任务
我们有一个资源非常密集的业务。我被要求使它同步,为此,我找到了互斥。实现起来似乎很简单,但我还没有成功。(如果这有什么区别的话,这恰好是生活在控制台应用程序中——尽管我无法想象为什么会这样。)亚startExecution是我所关心的。我有一些VAR来存储任务id,因为我必须重新启动我的机器才能解锁互斥锁(在我放入Finally之前)。我想我可能可以通过cmd行使用任务的进程ID终止任务。但是,它的PID肯定使用了其他东西,因为a)任务ID总是非常低,比如2或4,b)它没有显示在任务列表中Vb.net 具有互斥对象的任务,vb.net,task,mutex,Vb.net,Task,Mutex,我们有一个资源非常密集的业务。我被要求使它同步,为此,我找到了互斥。实现起来似乎很简单,但我还没有成功。(如果这有什么区别的话,这恰好是生活在控制台应用程序中——尽管我无法想象为什么会这样。)亚startExecution是我所关心的。我有一些VAR来存储任务id,因为我必须重新启动我的机器才能解锁互斥锁(在我放入Finally之前)。我想我可能可以通过cmd行使用任务的进程ID终止任务。但是,它的PID肯定使用了其他东西,因为a)任务ID总是非常低,比如2或4,b)它没有显示在任务列表中所以,
所以,概括一下,有两个问题:
1。我如何杀死正在运行的任何任务
2。我是否正确实现了互斥类
我整天都在为这件事苦恼;如果有人有线索,我将非常感激
Dim precrunchMutexName As String = "precrunchMutex"
Dim precrunchMutex As Mutex
Try
precrunchMutex = Mutex.OpenExisting(precrunchMutexName)
'if successful, that means there's one in progress right now.
Catch ex As Exception
'if one isn't found create a new one with that name
precrunchMutex = New Mutex(False, precrunchMutexName)
End Try
Try
Dim t As Task = Task.Factory.StartNew(
Sub()
writeLogClass.WriteLog("Waiting for mutex...")
'request access to precrunch Mutex -- waitone
If precrunchMutex.WaitOne() Then
writeLogClass.WriteLog("Mutex entered by task id: " & t.Id.ToString)
Try
startExecution()
Catch ex As Exception
writeLogClass.WriteLog(ex.ToString())
Finally
'release Mutex to allow access to another thread
precrunchMutex.ReleaseMutex()
writeLogClass.WriteLog("Mutex released")
End Try
End If
End Sub
)
Dim status = t.Status
Dim currentId = t.Id
Catch ex As Exception
writeLogClass.WriteLog("Error occurred when starting task. " & ex.ToString)
End Try
为什么您需要互斥?因为这些进程中有多个与服务器绑定,然后我们的客户机就被套住了。信号量更可取吗?为什么要终止任务(你指的是进程,对吗)?您的场景仍然没有意义。我想出于调试目的终止它。我一直在改变,不喜欢每次都重新启动电脑。在现实生活中,当这个程序就位时,我不想杀死它。你正确地使用了互斥。如果应用程序崩溃/被杀死,操作系统应该释放互斥锁。您可以在控制台中订阅Ctrl+C,并在退出prgram之前释放互斥。