我来自C ++世界所以我非常习惯锁定线程和互斥锁防护。假设这个基本功能:
async Task BasicProcess() {
// await time consuming task
}
如何锁定此功能,以便一次只能运行一个BasicProcess
?
这就是我想要实现的目标:
async Task BasicProcess() {
lock (BasicProcessLock) {
// await time consuming task
}
}
答案 0 :(得分:30)
你可以使用SemaphoreSlim(1),用(1)创建的SemaphoreSlim将确保只有一个线程可以获得锁定,任何其他尝试获取锁定的线程 - 将等到获得锁定的线程 - 释放它。
创建一个私人成员:
private SemaphoreSlim _syncLock = new SemaphoreSlim(1);
然后在你的代码中执行:
async Task BasicProcess() {
await _syncLock.WaitAsync(); //Only 1 thread can access the function or functions that use this lock, others trying to access - will wait until the first one released.
//Do your stuff..
_syncLock.Release();
}