0

Workメソッドを実行しているタスクがあります

private void Work(Crawler crawler, PropertyBag propertyBag) {}

ここで、すべてのタックを3分間停止してから、実行を続行します。でやってみます

Thread.Sleepしかし、動作していません。タスクはまだ機能しています。タスクを3分間停止してから、続行するための適切なソリューションは何ですか。たぶんロックとそれを行う方法は?

4

2 に答える 2

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

于 2012-07-23T09:45:16.693 に答える
3

タスクを自動的に一時停止および再開する方法はありません。ただし、ステートメントのように一時停止したいコードに特別な「ウォッチャー」を配置して、ManualResetEvent.WaitOne()いつでも別のスレッドからリセットすることができます。

于 2012-07-23T09:43:39.710 に答える