Local activities use the same stub-less pattern as regular activities.
@ActivityInterface
interface ValidationActivities {
suspend fun validate(input: String): Boolean
fun sanitize(input: String): String // Non-suspend also supported
}
val isValid = KWorkflow.executeLocalActivity(
ValidationActivities::validate,
KLocalActivityOptions(startToCloseTimeout = 5.seconds),
input
)
val sanitized = KWorkflow.executeLocalActivity(
ValidationActivities::sanitize,
KLocalActivityOptions(startToCloseTimeout = 1.seconds),
input
)object KWorkflow {
/**
* Execute a local activity with type-safe method reference.
*/
suspend fun <T, A1, R> executeLocalActivity(
activity: KFunction2<T, A1, R>,
options: KLocalActivityOptions,
arg1: A1
): R
suspend fun <T, R> executeLocalActivity(
activity: KFunction1<T, R>,
options: KLocalActivityOptions
): R
// ... up to 6 arguments
}/**
* Kotlin-native local activity options.
*/
data class KLocalActivityOptions(
val startToCloseTimeout: Duration? = null,
val scheduleToCloseTimeout: Duration? = null,
val scheduleToStartTimeout: Duration? = null,
val localRetryThreshold: Duration? = null,
val retryOptions: KRetryOptions? = null,
val doNotIncludeArgumentsIntoMarker: Boolean = false,
// Experimental
@Experimental val summary: String? = null
)KActivity.executionContext is available in local activities with limited functionality:
| Feature | Local Activity Behavior |
|---|---|
context.info |
Works (info.isLocal returns true) |
context.heartbeat() |
No-op (ignored) |
context.heartbeatDetails<T>() |
Returns null |
context.taskToken |
Throws UnsupportedOperationException |
context.doNotCompleteOnReturn() |
Throws UnsupportedOperationException |
- Activity Definition - Interface patterns
- Activity Implementation - Full implementation details
Next: Client