Tengo un hilo que está procesando. Me gustaría poder detener este hilo durante la ejecución, de alguna manera guardar su posición (y el estado de los objetos en los que está operando), y luego continuar desde esa ubicación en una fecha posterior (por lo tanto, después de que mi computadora se haya reiniciado).¿Cómo hago una pausa durante la ejecución, guardo el estado y continúo desde el mismo punto más adelante?
En C# esto no es posible ¿no? Y si no, ¿cuál es el diseño adecuado para lograr esta funcionalidad?
Así que mi deseo original era tener algo así como
class Foo : Task {
void override Execute(){
//example task
while(someCondition){
...do stuff...
}
}
}
y ser capaz de hacer una pausa/guardar en cualquier punto dentro de esa función. Cuando la función finaliza, todos saben que está completa. Como alternativa, tal vez esta es la mejor manera de hacerlo
class Foo : Task {
void override Execute(State previousState){
//set someCondition, other stuff
//IsPaused = false;
previousState.setUpStuff();
//example task
while(someCondition){
...do stuff...
if(base.IsPauseRequested){
base.UpdateState(); //this would be a bit different but just to get the idea
base.IsPaused = true;
return;
}
}
base.RaiseNotifyTaskComplete();
}
}
Así que el primer caso es mucho más simple para otras personas que necesitan para heredar mi clase base, ya que sólo tienen que implementar la función Ejecutar. Sin embargo, en el segundo caso, deben considerar el estado anterior y también administrar dónde existen buenos puntos de pausa. ¿Hay una mejor manera de hacer esto?
Esto es una buena idea y me preguntaba acerca de algo así ... casi como una matriz que está llena de indicadores de función (delegados). Así que solo muevo un puntero a lo largo de la matriz. Mi problema con esta idea es que quiero que mi clase base sea utilizada por otras personas. Creo que hacer algo como esto complicaría demasiado la situación (ya que muchas personas simplemente tendrían tareas que solo tienen un puntero a la función en la matriz). Aunque me gusta esta idea. – i8abug