Как сделать задержку с проверкой перед добавлением данных в ASP.NET
Как сделать задержку перед добавлением новых данных в ASP.NET Core с целью отмены записи этих данных, если во время задержки поступит запрос на добавление таких же данных?
Сценарий должен быть такой: передаем в метод нового юзера, проходим проверку на null. А дальше нужна задержка на 5 сек. и если за 5 сек. будет попытка добавления юзера с таким же логином, то не добавляем ничего, иначе добавляем юзера в БД. При этом эта задержка не должна мешать добавлять других юзеров.
Пытался применить здесь класс Task и CancellationToken, но в многопоточным программированием не силен, не разобрался.
[HttpPost]
public async Task<ActionResult<User>> AddUser(User user)
{
if (user == null)
return BadRequest();
db.Users.Add(user);
await db.SaveChangesAsync();
return Ok();
}
Ответы (1 шт):
Я нашел подходящее для себя решение. Создал статический класс, который использую как глобальную переменную и в нем же проверяю попытку регистрации одинаковых логинов. Вот этот класс:
public static class UserHelper
{
static List<string> logins = new List<string>();
public static void Add(string login)
{
logins.Add(login);
}
public static bool Check(string login)
{
return logins.Where(x => x.Equals(login)).Count() > 1;
}
public static void Clear()
{
logins.Clear();
}
}
И измененный метод добавления нового пользователя:
[HttpPost]
public async Task<ActionResult<User>> AddUser(User user)
{
if (user == null)
return BadRequest();
UserHelper.Add(user.Login);
await Task.Delay(5000);
if (UserHelper.Check(user.Login))
return BadRequest("Attempt to create more than one user with the same username");
db.Users.Add(user);
await db.SaveChangesAsync();
UserHelper.Clear();
return Ok();
}