私は以下のような仕事をしています
job = GlobalScope.launch {
delay(5000)
runOnUiThread {
some unwanted code
}
}
このジョブは、実行されるまで5秒間待機します。そして5秒前にキャンセルするために私は電話しています
job?.cancel()
さて、5秒に達する前にこのジョブを実行する方法はありますか?
私はのようなものを探しています、job?.forceExecute.ignoreDelays
または次のようなjob?.forceExecute.ignoreDelay("FirstDelay")
名前のオプションがありますかdelay(5000,"FirstDelay")
これは、ボイラープレートコードを回避するのに非常に役立ちます。
私が考えることができる1つの可能な解決策は、遅延の代わりにwithTimeoutを使用することであり、タイムアウトの場合にタスクを実行するために、TimeoutCancellationExceptionをチェックできます。
GlobalScope.launch {
try {
withTimeout(5000){
//Imagine checkThisCondition() is a suspension function which will check the condition you need and return boolean
val condition : Boolean = checkThisCondition()
if(condition){
executeTheTask()
}
}
} catch (e : TimeoutCancellationException){
executeTheTask()
}
}
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加