[Rx] Ограничить время выполнения
От: _NN_ www.nemerleweb.com
Дата: 10.07.17 20:20
Оценка:
Мне нужно ограничить время выполнения обработчиков.
При чём в одном обработчике может быть много команд и хотелось бы прекратить выполнения по достижении максимального времени в заданном промежутке.
Псевдокод:

class ExecutionLimiter
{
 // maxExecutionTime - максимально допустимое время работы
 // executionPeriod -  окно времени для измерения времени выполнения
 public ExecutionLimiter(Action[] actions, int maxExecutionTime, int executionPeriod)
 {
  _actions = actions
 }

 // время начала -> время выплонения
 Dictionary<DateTime, int> _previousEecutionTimes;

 DoActions()
 {
   clearOldMeasurements();
   // проверка что можно выполнять действия
   if(_previousExecutionTimes.Sum() >= maxExecutionTime) return;

   foreach(var action in actions)
   {
    // выполняем действие и записываем сколько времени заняло
    var startAction = Date.Now;
    action();
    var executionTime = Data.Now - startAction;
 
    // записываем сколько выполнились
    _previousEecutionTimes.Add(executionTime);
    // удаляем старые данные
    clearOldMeasurements();
 
    // если больше чем положено, выходим.
    if(_previousEecutionTimes.Sum() >= maxExecutionTime)
    {
      break;
    }
   }
 }

  // удаляем старые данные
 clearOldMeasurements()
 {
   var now = Date.Now;
   foreach(var kv in _previousExecutionTimes) { if(kv.Key < now - _executionPreiod) _previousExecutionTimes.Remove(kv.Key);
 }
}



Может есть идеи как организовать такое через Rx если вообще стоит?
http://rsdn.nemerleweb.com
http://nemerleweb.com
rx
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.