Как заставить функцию вызываться с сопрограммой? - PullRequest
0 голосов
/ 28 апреля 2020

Есть ли способ сделать так, чтобы функция вызывалась с сопрограммой в области ввода-вывода?

Я думаю, я могу сделать

suspend fun f() {}

Но, возможно, есть аннотация для этого?

Что если я все еще хочу, чтобы функция блокировалась? Потому что внутри функции я обычно делаю вызовы БД.

1 Ответ

5 голосов
/ 28 апреля 2020

Если это функция приостановки, она, безусловно, будет вызываться только из сопрограмм.

Что касается необходимости вызова ее в области ввода-вывода, вы могли бы просто установить диспетчер ввода-вывода самостоятельно :

suspend fun f() = withContext(Dispatchers.IO) { ... }

... или, если вы действительно хотели бы просто отклонить любого пользователя, который не использовал диспетчер ввода-вывода, вы могли бы написать require(coroutineContext[CoroutineInterceptor] == Dispatchers.IO), но я бы конечно, это очень странно для пользователя.

...