Не прерывая рабочий процесс событиями - PullRequest
0 голосов
/ 26 марта 2019

Я хочу узнать немного больше о том, как на самом деле работают события.

Моя цель: я хочу реализовать своего рода планирование. У меня есть набор операций, которые должны быть сделаны в разных местах. В моем процессе планирования я хочу посмотреть на определенные состояния операций и назначить их там. Как на самом деле работает планирование, на самом деле не важно. В определенных точках процесса вызывается событие, когда создается новая операция или, например, выполняется операция. Каждый раз, когда вызывается это событие, я запускаю свой алгоритм планирования и ищу новые назначения.

Моя проблема: я не знаю, как эти события действительно влияют на мой рабочий процесс. В определенный момент операция A находится в начале моего планирования в состоянии (выполняется) и в более поздней точке в состоянии (завершено), что делает планирование довольно трудным. Я не хочу, чтобы государства менялись во время этого процесса. Я думаю, что события вызывают проблему, и теперь, чтобы найти решение, я хочу больше узнать об этих событиях. Как это работает?

Я слышал что-то вроде: если вызывается событие, мой текущий процесс прерывается, событие обрабатывается, а затем мой текущий процесс продолжается. Так они работают?

И если да, то как выглядит следующий сценарий: расписание выполнения ()> прерывание (новая операция) Этот вызов события теперь снова вызывает schedule ()> run schedule () (2)

Теперь завершится ли сначала расписание () (2), которое вызывается в событии, затем завершится событие и затем исходное расписание ()?

И кроме того, есть ли хороший способ обрабатывать такой рабочий процесс с событиями? стандартная процедура или что-то? Или события там не проблема, а у меня где-то еще проблема?

Могу ли я попросить программу не прерывать этот рабочий процесс? Должен ли я запустить schedule () в потоке самостоятельно?

Спасибо за ваше время

Упрощенная версия кода:

public void schedule()
{
  //Do the scheduling process (1)
  if (this.scheduleChanged != null)
  {
     this.scheduleChanged(this, EventArgs.Empty);
  }
  //Show debuginformation (3)
}  

//Gets called in schedule after all operations are assigned to a location
public void EndOfScheduleEvent()
{
  //Let operations run on assigned locations
  //switch state of operation to running (2)
}

//When an operation is finished it causes an event, which calls this method
//This method calls again the schedule() method for reschedule
public void endOfOperationEvent()
{
  //change state of operation to pause
  schedule();
}

Я много печатаю для отладки. И что я обнаружил, это то, что операция, которая начинается в состоянии (готово) в (1) в коде. Теперь я запускаю событие scheduleChanged (). Что я хочу знать, так это то, что метод schedule () продолжается. так что у меня будет для этой операции на (3) в коде состояние (готово). Но происходит то, что событие вызывается напрямую, поэтому мой текущий процесс прерывается. Итак, мы сейчас находимся в методе EndOfScheduleEvent (), который меняет состояние моей операции на (выполняется) (2) в коде. и затем продолжается снова в моем методе schedule (), где мой вывод в (3) (выполняется) для моей операции.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...