У меня есть ситуация клиент-сервер, когда каждая сторона измеряет время, только кажется, что проблема в том, что измеренное время не совпадает.Короче говоря, идея состоит в том, что существует обратный отсчет, после которого программа должна что-то делать.Я измеряю это на стороне сервера.Но необходимо отобразить обратный отсчет, поэтому я запускаю его отдельно на стороне клиента.Конечным результатом является то, что клиентская сторона показывает 23 секунды, когда сервер отправляет сообщение, сигнализирующее о том, что время истекло, с обратным отсчетом 10 минут.
На стороне клиента - XNA, код:
MillisecCount += gameTime.ElapsedGameTime.Milliseconds;
if (MillisecCount >= 1000)
{
MillisecCount -= 1000;
Timer++;
}
И таймер затем вычитается из доступного времени, и это отображается.На стороне сервера это происходит:
async Task timeOut(int delay, CancellationToken ct)
{
await Task.Delay(1000 * delay);
ct.ThrowIfCancellationRequested();
}
void sendTimeOutMessage(Task t)
{
//Send timeout message on network.
}
void reTime()
{
CancellationTokenSource cts = new CancellationTokenSource();
CancelStack.Push(cts);
Task t = timeOut(maxTime - Timer, cts.Token);
t.ContinueWith(sendTimeOutMessage, TaskContinuationOptions.OnlyOnRanToCompletion);
}
В тестовом сценарии с 23-секундной разницей reTime () вызывается только один раз, в начале обратного отсчета.