0

だから私はミニ タイムアウト ライブラリを scala で書いています。これは次のコードに非常によく似ています

実行する関数は、正常に完了するか、永久にブロックされるため、タイムアウト時に実行中のスレッドがキャンセルされるようにする必要があります。

したがって、私の質問は次のとおりです。タイムアウト時に、awaitAll は基になるアクターを終了しますか、それとも永久に実行し続けますか?

私が検討している代替案の 1 つは、呼び出すことができる明示的な cancel() メソッドがあるため、Java Future ライブラリを使用してこれを行うことです。

4

1 に答える 1

0

[免責事項-私はScalaアクターに不慣れです]それを読んでいるscala.actors.Futures.awaitAll間、先物のリストがすべて解決されるまで、またはタイムアウトになるまで待ちます。Future.cancel、、、またはその他の方法で;Thread.interruptを終了しようとはしません。Future後で戻ってきて、もう少し待つようになります。

Future.cancelが適切な場合もありますが、コードが操作の実行に参加する必要がある場合があることに注意してください。cancel必ずしも無料で提供されるとは限りません。 Future.cancelスケジュールされているがまだ開始されていないタスクをキャンセルします。実行中のスレッドに割り込みます[チェック可能なフラグを設定します]...割り込みを確認する場合と確認しない場合があります。レビューThread.interruptThread.isInterrupted()。長時間実行されるタスクは通常、中断されているかどうか(コード)を確認し、自己終了します。さまざまなメソッド(つまりThread.sleepObject.waitなど)は、をスローすることで割り込みに応答しInterruptedExceptionます。コードがこれらの制約内でニーズを満たしていることを確認するには、そのメカニズムを確認して理解する必要があります。これを参照してください。

于 2012-07-25T04:58:23.110 に答える