c # если текущее время таймера больше - PullRequest
0 голосов
/ 16 сентября 2018

Я получаю поток ответа gRPC и хотел бы вызвать действие, если сообщение не получено после 500 мс.Я собирался использовать класс Stopwatch, но это больше для отладки, и я был обеспокоен тем, что это может быть не самый эффективный метод.Я хотел бы сделать что-то в рамках моего существующего метода:

while (await streamingCall.ResponseStream.MoveNext(
                    default(CancellationToken)))
                {

                }

Так, чтобы:

while (await streamingCall.ResponseStream.MoveNext(
                    default(CancellationToken)))
                {
                    //Message received
                    //Begin some sort of timer
                    //If no other message has been received for 500ms, execute ExampleMethod()
                }

1 Ответ

0 голосов
/ 16 сентября 2018

Вы можете присвоить DateTime переменной всякий раз, когда вы получили сообщение, и вычесть из него старое время в Timer, чтобы увидеть, сколько времени прошло с момента последнего сообщения:

DateTime LastMsgTime = DateTime.MinValue;
Timer timer = new Timer { Interval = 50, Enabled = false };
timer.Tick += (s,e) => 
{ 
    if((DateTime.Now- LastMsgTime).TotalMilliSeconds > 500)  
       {ExampleMethod(); timer.Enabled = false; }
};
while (await streamingCall.ResponseStream.MoveNext(
                    default(CancellationToken)))
                {
                     LastMsgTime = DateTime.Now;
                    //Message received
                    timer.Enabled = true;
                }
...