C# 中执行 Task.Run(async () =>)调用同一个方法只执行一次
时间: 2024-04-22 15:27:27 浏览: 244
C#编程中设置程序只可被运行一次的方法
执行 `Task.Run(async () =>)` 时,传入的是一个异步函数,该函数会在一个新的线程中执行。如果该异步函数中调用了同一个方法,确实会出现只执行一次的情况,这是因为该方法可能会被锁定,直到前一个线程执行完毕后才能被下一个线程执行。
为了避免这种情况,可以使用 `SemaphoreSlim` 类实现方法的异步锁定。在方法的开头使用 `await semaphore.WaitAsync()` 方法获取锁,在方法的结尾使用 `semaphore.Release()` 方法释放锁。这样就可以确保同一时间只能有一个线程执行该方法,避免出现只执行一次的情况。
阅读全文