Workメソッドを実行しているタスクがあります
private void Work(Crawler crawler, PropertyBag propertyBag) {}
ここで、すべてのタックを3分間停止してから、実行を続行します。でやってみます
Thread.Sleep
しかし、動作していません。タスクはまだ機能しています。タスクを3分間停止してから、続行するための適切なソリューションは何ですか。たぶんロックとそれを行う方法は?
Workメソッドを実行しているタスクがあります
private void Work(Crawler crawler, PropertyBag propertyBag) {}
ここで、すべてのタックを3分間停止してから、実行を続行します。でやってみます
Thread.Sleep
しかし、動作していません。タスクはまだ機能しています。タスクを3分間停止してから、続行するための適切なソリューションは何ですか。たぶんロックとそれを行う方法は?
Thread.Sleep
現在のスレッドをスリープ状態にするため、機能しません。
TPLを使用せずに手動でスレッドを作成する場合は、スレッドのリスト/配列ができていることを願っています。Thread.SuspendメソッドとThread.Resumeメソッドを使用できます。
foreach (var t in threads) t.Suspend();
// Then in 3 minutes.
foreach (var t in threads) t.Resume();
スリープ/履歴書は廃止されていることに注意してください。
編集
スレッドのリストがなくても、を使用できますManualResetEvent
。Workメソッドでは、作業.WaitOne()
を試みる前にそれを実行します。
.Reset
タスクをスリープ状態にしたいときにメインスレッドで呼び出し、3分後に呼び出します.Set
。
タスクを自動的に一時停止および再開する方法はありません。ただし、ステートメントのように一時停止したいコードに特別な「ウォッチャー」を配置して、ManualResetEvent.WaitOne()
いつでも別のスレッドからリセットすることができます。