мне нужно сделать цикл, который будет длиться 20 секунд. Все это время, будет производиться запрос к БД на проверку значения State. Изначально State = 0, если в течении 20 секунд значение измениться на 1, то выполнится действие 1, если же значение за 20 секунд останется 0, то выполниться действие 2. Помогите, пожалуйста!
Я так понимаю изюмика - сам цикл с датой. Нужно взять текущую дату, записать в переменную. Из текущей даты Now вычитать переменную, в цикле.
var dfrom = DateTime.Now;
int State = 0;
while ((DateTime.Now - dfrom).Seconds < 20) {
//... ваша проверка
// System.Threading.Thread.Sleep(100); // Желательно дать возможность работать соседним потокам
}
//...
Дальше думаю несложно.
Если идет работа с базой (другим сервисом), то тут наверно стоит использовать Task'и, а у них есть такой замечательный помощник, как CancellationToken
, который можно попросить отменить задачу после определенного времени.
Вот я сделаю простой пример такой реализации, но хочу заметить, что это все набросал для примера на коленке, но даже такой грубый пример думаю будет понятен:
private bool status = false;
public async Task<bool> CheckStatus ()
{
var cts = new CancellationTokenSource();
cts.CancelAfter(TimeSpan.FromSeconds(10));
var result = false;
while (true)
{
Debug.WriteLine($"[{DateTime.Now}] IsCancellationRequested: {cts.Token.IsCancellationRequested} Status: {status}");
if (cts.Token.IsCancellationRequested) break;
if (status)
{
result = true;
break;
}
await Task.Delay(TimeSpan.FromSeconds(1));
}
return result;
}
Теперь если мы запустим эту задачу (var result = await CheckStatus();
), то результатом получим следующий лог:
[08.08.2019 12:42:16] IsCancellationRequested: False Status: False
[08.08.2019 12:42:17] IsCancellationRequested: False Status: False
[08.08.2019 12:42:18] IsCancellationRequested: False Status: False
[08.08.2019 12:42:19] IsCancellationRequested: False Status: False
[08.08.2019 12:42:20] IsCancellationRequested: False Status: False
[08.08.2019 12:42:21] IsCancellationRequested: False Status: False
[08.08.2019 12:42:22] IsCancellationRequested: False Status: False
[08.08.2019 12:42:23] IsCancellationRequested: False Status: False
[08.08.2019 12:42:24] IsCancellationRequested: False Status: False
[08.08.2019 12:42:25] IsCancellationRequested: True Status: False
Видим, что через 10 секунд задача завершилась, статус у нас не изменился и мы отдали false
дальше. Вам лишь остается это подправить под себя и грамотно все это реализовать.
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Делаю rss-reader, не знаю как привести pubdate к виду которому я хочуПо умолчанию pubdate имеет вид "Tue, 06 Aug 2019 00:00:00 +0300"
Есть ответ сервера в таком виде (Camunda), хотелось бы выловить id каждого, как сие сотворить даже и не представлюПомогите пожалуйста, буду очень...