Как запретить пользователю изменять данные во время выполнения асинхронного метода сохранения этих данных?C#

Место общения программистов C#
Ответить Пред. темаСлед. тема
Anonymous
 Как запретить пользователю изменять данные во время выполнения асинхронного метода сохранения этих данных?

Сообщение Anonymous »

Я разрабатываю проект WPF. Согласно паттерну Repository у меня есть два репозитория, реализация которых уже готова. Они не используют асинхронность, но я хочу ее добавить. И вот что меня смущает: когда пользователь нажимает кнопку «Сохранить», что, например, запускает асинхронность, пользователь может попытаться изменить данные во время сохранения данных, например, в тех ячейках, в которые он их ввел. Я думал, что CuncurrencyBag решит все проблемы. Я написал с его помощью небольшой тест:

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

Person person = new Person();
person.Name = "Denis";

var list = new ConcurrentBag
();
list.Add(person);

var task = ChangeVariableAsync(list); // задача начинает выполняться
var el = list.Last(p => p.Name == "Denis");
el.Name = "Dmitry";
Console.WriteLine($"New name: {el.Name}");

await task; // ожидаем завершения задачи

// определение асинхронного метода
async Task ChangeVariableAsync(ConcurrentBag people)
{
await Task.Delay(5000);
try
{
var esl = list.Last(p => p.Name == "Denis");
esl.Name += "s";
Console.WriteLine($"Old name: {esl.Name}");
}
catch (Exception)
{
var esl = list.Last(p => p.Name == "Dmitry");
Console.WriteLine($"Old name: {esl.Name}");
}
}

class Person
{
public string Name { get; set; }
}

Однако данные все равно изменились.
Как можно запретить пользователю изменять данные во время работы асинхронного метода, чтобы не потерялся смысл асинхронности? (Ведь мы добавляем его именно для того, чтобы основной поток не блокировался).
Или как сделать так, чтобы изменения, которые пытается внести пользователь, не затрагивали сохраненные данные?
У меня просто возникла идея, типа, а что если, пока данные сохраняются, сделать ползунок, показывающий, сколько времени осталось? Или сделать что-то подобное. Что вы думаете?
Или какое решение здесь следует использовать?

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

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

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

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

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

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

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