SemaphoreSlim (.NET)能阻止同一个线程进入代码块吗?

13 浏览
0 Comments

SemaphoreSlim (.NET)能阻止同一个线程进入代码块吗?

我已阅读了SemaphoreSlim的文档,该文档表明如果将SemaphoreSlim配置为SemaphoreSlim _semaphoreSlim = new SemaphoreSlim(1, 1);,它将限制一段代码每次只能由一个线程运行。

然而,文档没有指示它是否会阻止同一个线程访问该代码。这在使用异步和等待时会引发问题。如果在方法中使用await,控制将离开该方法,并在任务或线程完成后返回。在我的示例中,我使用了一个带有异步按钮处理程序的按钮。它调用另一个带有'await'的方法(Function1)。然后,Function1调用了await Task.Run(() => Function2(beginCounter));。在我的Task.Run()周围,我使用了一个SemaphoreSlim。看起来它确实阻止了同一个线程进入Function2。但根据文档(我所读的),这并不保证,我想知道是否可以依赖它。我在下方附上了完整的示例代码。

谢谢,

Dave

0