C# Mutex 在异步方法中线程同步失效

空明流光 / 2024-10-16 / 原文

Mutex 在异步方法中线程同步失效:

private readonly Mutex mutexInitialize = new Mutex();
public async Task<bool> Initialize()
{
    mutexInitialize.WaitOne();
    try
    {
          ...
    }
    finally
    {
        mutexInitialize.ReleaseMutex();
    }
}

System.ApplicationException:“Object synchronization method was called from an unsynchronized block of code.”

改为以下代码后正常:

public async Task<bool> Initialize()
{
    await semaphoreSlimInitialize.WaitAsync(); // 异步等待获取锁;
    try
    {
        ....
    }
    finally
    {
        semaphoreSlimInitialize.Release(); // 释放锁
    }
}