SemaphoreSlim and async/await
问题 This works: int _counter; readonly SemaphoreSlim _semaphore = new SemaphoreSlim(1, 1); async void Button_Click(object sender, RoutedEventArgs e) { if (_semaphore.Wait(0)) { Title = $"{ ++_counter}"; await Task.Delay(1000); // simulate work Title = $"{ --_counter}"; _semaphore.Release(); } } After first click further buttons clicks are ignored until work is finished. Tittle can be 1 or 0 . And this doesn't work void Button_Click(object sender, RoutedEventArgs e) { if (_semaphore.Wait(0)) {