10

我来自 C++ 世界,所以我非常习惯于锁定线程和互斥锁。假设这个基本功能:

async Task BasicProcess() {
    // await time consuming task
}

如何锁定此功能,以便一次BasicProcess只能运行一个?

这就是我想要实现的目标:

async Task BasicProcess() {
    lock (BasicProcessLock) {
         // await time consuming task
    }
}
4

1 回答 1

32

您可以为此使用 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();

 }
于 2013-07-23T05:28:02.947 回答