C# SemaphoreSlim для блокировки состояния гонки не работает, почему?C#

Место общения программистов C#
Ответить Пред. темаСлед. тема
Anonymous
 C# SemaphoreSlim для блокировки состояния гонки не работает, почему?

Сообщение Anonymous »

У меня возникла проблема с состоянием гонки в приложении C# Avalonia, и я понятия не имею, почему.
В приведенном ниже классе есть 2 метода:

Код: Выделить всё

LoadUserData()
вызывается при создании ViewModel при запуске приложения.

Код: Выделить всё

SaveUserData()
вызывается перед закрытием приложения через событие времени существования приложения (что-то вроде appLifetime.Exit += viewModel.SaveUserData;). Сохранение не должно произойти, если загрузка еще не завершилась.

Код: Выделить всё

public sealed class MainWindowViewModel : ViewModelBase
{
private static readonly SemaphoreSlim mySemaphore = new(1, 1);

public MainWindowViewModel() => LoadUserData();

private void LoadUserData() =>
Task.Run(async () =>
{
await mySemaphore.WaitAsync();
try
{
var items = await Task.WhenAll(UserDataManager.LoadUserItemsAsync());
Dispatcher.UIThread.Post(() =>
{
foreach (var item in items)
AddItem(item);
});
}
finally
{
mySemaphore.Release();
}
});

public void SaveUserData()
{
// should not save if loading didn't finish yet
if (mySemaphore.CurrentCount == 0)
return;

UserDataManager.SaveUserData(this.items);
}
}
Однако пользователи сообщают, что сохранение происходит, хотя загрузка не завершилась. Что я здесь делаю не так?


Подробнее здесь: https://stackoverflow.com/questions/793 ... orking-why
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • SemaphoreSlim для блокировки состояния гонки не работает, почему?
    Anonymous » » в форуме C#
    0 Ответы
    23 Просмотры
    Последнее сообщение Anonymous
  • SemaphoreSlim для блокировки состояния гонки не работает, почему?
    Anonymous » » в форуме C#
    0 Ответы
    18 Просмотры
    Последнее сообщение Anonymous
  • SemaphoreSlim против оптимистической блокировки с помощью токена параллелизма: лучший подход для веб-приложений на C# и
    Anonymous » » в форуме C#
    0 Ответы
    18 Просмотры
    Последнее сообщение Anonymous
  • Необходимо понять использование SemaphoreSlim.
    Anonymous » » в форуме C#
    0 Ответы
    17 Просмотры
    Последнее сообщение Anonymous
  • Модульное тестирование C#: параллельные запросы с помощью MemoryCache и SemaphoreSlim
    Anonymous » » в форуме C#
    0 Ответы
    13 Просмотры
    Последнее сообщение Anonymous

Вернуться в «C#»