10

私は C++ の世界から来たので、スレッドのロックとミューテックスの保護に非常に慣れています。この基本機能を仮定すると:

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

この関数を一度に 1 つしか実行できないようにロックするにはどうすればよいBasicProcessですか?

これは私が達成したいことです:

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

1 に答える 1

32

これには SemaphoreSlim(1) を使用できます。(1) で作成された SemaphoreSlim は、1 つのスレッドのみがロックを取得できるようにし、ロックを取得しようとする他のスレッドはすべて、ロックを取得したスレッドが解放されるまで待機します。
プライベート メンバーを作成します。

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 に答える