以下は永遠に待っていると思います。タイムアウトを指定するにはどうすればよいですか?
await(new Job<Long>() {
@Override
public Long doJobWithResult() throws Exception {
...
}
}.now());
以下は永遠に待っていると思います。タイムアウトを指定するにはどうすればよいですか?
await(new Job<Long>() {
@Override
public Long doJobWithResult() throws Exception {
...
}
}.now());
スレッドを強制終了するタイムアウトを実装することは、Thread.stop()またはそれが停止したときにクリーンアップされない可能性のあるような恐ろしいものを使用する必要があるため、実際には一般的に行うのはかなり難しいことです。これを行うためのより良い方法は、タイムアウトを長いジョブにフラグを設定して、処理を停止してより早く戻るようにすることです。または、長いジョブを続行して、タイムアウト時に応答をレンダリングすることもできます。
これがあなたが望むことをするテストケースです:
public static void waitWithTimeout() {
Promise<String> task1 = new jobs.DoSomething(100).now();
Promise<String> task2 = new jobs.DoSomething(2000).now();
Either<List<String>,Timeout> r = await(Promise.waitEither(Promise.waitAll(task1, task2), Timeout(300)));
for(Timeout t : r._2) {
StringBuilder result = new StringBuilder();
if(task1.isDone()) {
result.append(" + Task1 -> " + task1.getOrNull());
}
if(task2.isDone()) {
result.append(" + Task2 -> " + task2.getOrNull());
}
renderText("Timeout! Partial result is " + result);
}
renderText("Fail!");
}
アクションの前の時間を指定します。したがって、30秒のタイムアウトの場合:
await("30s", new Job<Long>() {
@Override
public Long doJobWithResult() throws Exception {
...
}
}.now());