私は何らかの処理をしているスレッドを持っています。私は実行中にこのスレッドを停止することができますし、何とかその位置(およびそれが動作しているオブジェクトの状態)を保存し、後でその場所から続行します(コンピュータが再起動した後)。実行中に一時停止し、状態を保存し、後で同じポイントから続行するにはどうすればよいですか?
C#ではこれができません。そうでない場合、この機能を実現するための適切な設計は何ですか?
だから私のオリジナルの願いは
class Foo : Task {
void override Execute(){
//example task
while(someCondition){
...do stuff...
}
}
}
のようなものを持っており、その関数内の任意の時点で保存/一時停止できるようにしました。関数が終了すると、誰もが完了したことを知っています。 は別の方法として、おそらくこれは、したがって、最初のケースは、彼らが唯一の実行機能を実装するために持っているように私の基本クラスを継承する必要がある他の人のためにたくさん簡単ですそれを
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();
}
}
を行うには良い方法です。しかし、第2のケースでは、以前の状態を考慮し、良好な一時停止点が存在する場所を管理する必要があります。これを行うより良い方法はありますか?
これは良い考えで、そのようなものについては疑問に思っていました。ほぼ関数ポインタ(デリゲート)でいっぱいの配列に似ています。だから、私はちょうど配列に沿ってポインタを移動します。このアイデアの私の問題は、自分のベースクラスを他の人が使うようにすることです。私はこのようなことをすると、状況が複雑になりすぎると思います(多くの人が配列内に関数ポインタを1つしか持たないタスクがあるため)。私はこの考えが好きです。 – i8abug