0

私はこのことをやろうとしていますが、どうすればわかりませんか? このコードは、Network Service が SMS 請求情報を送信するように要求します。請求が成功または失敗したときに、ネットワーク サービスの応答が記録されます。応答を取得するのに時間がかかる場合があり、そのプロセスをキャンセル/一時停止して、新しい番号で要求を再送信したい.

long before = System.currentTimeMillis();
String resp = new SmsConnection().doResponseRequest(sms);
long totalResponseTime=((System.currentTimeMillis() - before )/1000);

記録しかできずtotalResponseTime、サービスからの応答を得るのに 50 ~ 100 秒かかることがあります。言い方はありますか

resp15秒以上かかる場合は、このリクエストをキャンセル/一時停止し、同時に別のリクエストを再送信してください。応答を受け取った後、そのリクエストを処理します。」

応答を受信するには、タイムアウト オプションのようなものが必要です。提案してください。

ありがとう、

4

3 に答える 3

0

Callable を使用:

Future<String> futureResponse = service.submit(new YourCallable); //service is the ExecutorService that you use
//this will block for 15 seconds here
String result = futureResponse.get(15, TimeUnit.SECONDS); //this needs to wrapped in a try catch with TimeoutException
if(result == null){
    //You did not get the result in 15 seconds
    futureResponse.cancel(true);//kill this task

    //schedule a new task
    service.submit(new YouCallable());

}
于 2013-04-29T11:09:13.767 に答える
0

Callableに抽出することで、おそらくExecutorServiceを使用できます。ここで例を見ることができます。new SmsConnection().doResponseRequest(sms);

于 2013-04-29T10:52:48.673 に答える