提问人:alGhul7 提问时间:8/28/2023 最后编辑:alGhul7 更新时间:8/28/2023 访问量:54
使用协程 kotlin 的基本用例
Base UseCase with coroutines kotlin
问:
我想通过以下方式拥有一个BaseUseCase类:
- 必须允许指示参数。
- 必须在后台线程中运行工作本身(这将是 doWork 方法)。
- 必须返回主线程中的值。
我想返回一个值,而不是通过回调返回它,因为我希望调用用例的函数能够在用例完成后直接返回该值。
我有以下方法,但我不知道它是否正确。我使用了两倍的@withContext,所以我不知道是否可以改进。你可以帮我吗?
当前代码:
import kotlinx.coroutines.CoroutineDispatcher
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.withContext
abstract class SimpleBaseUseCase<out ResultType, in Params> where ResultType : Any {
private val backgroundDispatcher: CoroutineDispatcher = Dispatchers.IO
private val uiDispatcher: CoroutineDispatcher = Dispatchers.Main
protected abstract suspend fun doWork(params: Params): Result<ResultType>
/**
* @param params input data for the background job
* @return the type of data indicated in @ResultType generic wrapped in a Result object.
*/
open suspend operator fun invoke(params: Params): Result<ResultType> = withContext(uiDispatcher) {
withContext(backgroundDispatcher) {
doWork(params)
}
}
}
而且,调用方将是:
class CustomHandler {
//...
suspend fun methodThatCallsUseCase: Result<String> {
return useCase("paramExample")
}
}
答: 暂无答案
评论
withContext
useCase()
methodThatCallsUseCase
suspend
suspend
withContext
withContext