onDoOnce

fun onDoOnce(name: String, onDo: Runnable, onDone: Runnable, version: String = ""): Only
inline fun onDoOnce(name: String, crossinline onDo: (Int) -> Unit, crossinline onDone: () -> Unit = {}, version: String = ""): Only

execute the onDo block only once.

fun onDoOnce(name: String, onDo: Runnable, onDone: Runnable, onLastDo: Runnable, onBeforeDone: Runnable, version: String = ""): Only
inline fun onDoOnce(name: String, crossinline onDo: (Int) -> Unit, crossinline onDone: () -> Unit = {}, crossinline onLastDo: () -> Unit = {}, crossinline onBeforeDone: () -> Unit = {}, version: String = ""): Only

execute the onDo block only once with onLastDo and onBeforeDone.