モノラル/フラックス:スレッドを一時停止し、イベントやタイムアウトを待つする方法

アンドレイ:

私は、モノラル/フラックスが中断し、遅延やタイムアウトによって再活性化を解決する方法のアドバイスをお願いしたいと思います。

タスクは次のとおりです。アプリケーションは、HTTPリクエストを受信すると応答を提供しなければなりません。

要求が非同期ソケットメッセージを使用して受信されたときに送信されるべきです。そして、我々は、特定の答えを待って、ない、30秒以上にする必要があります。

いくつかのRunnableが呼び出されます、またはその他のオプションはそれぞれ0.2秒のクエリは、いくつかの変数であり、それは、関連する値に設定されている場合、プロセスを継続するまでスレッドを中断する必要が私はそう。

あなたは私にいくつかの提案をお願いできますか?

ありがとうございました

アンドレイ:

最後に、私は解決策を見つけました。

たぶん最もエレガントなしかし作品、再帰を使用していません

このコードは、肯定的な反応ではなく、10秒以上のタイムアウトを取得するには、変数の状態を問い合わせます。

val delayDuration = Duration.ofMillis(200)
val maximumAttempts = 50

fun createDelayedMono(counter : Int) : Mono<BigInteger> {

    val mono = Mono.delay(delayDuration).flatMap {
        it ->

        if (counter < maximumAttempts && reactorHelper.isEventCompleted(rrn)) {
            reactorHelper.removeEvent(rrn)
            return@flatMap Mono.just(BigInteger.ZERO)
        } else {
            return@flatMap createDelayedMono(counter + 1)
        }

    }

    return mono
}

おすすめ

転載: http://43.154.161.224:23101/article/api/json?id=317605&siteId=1