Suspend functions in DAO

Do I understand correctly that I should use suspend functions in my DAO?

Basically everything that calls IO should be marked as suspend to notify client about time/resource consuming operation.

Is it correct/desired way of using suspend?

No, but suspending functions in DAO is easy to invoke inside a coroutine, because you don’t have to considering the dispatcher.

So I probably should clarify.

Suspend indicates that a function can take a long time to get the result or has heavy calculation. DAO usually will be implemented as a call to some database. In this case it looks like any DAO interface should have suspend functions to let client decide if it wants to wait for results or run it in a separate thread.

In which case I would avoid marking functions of DAO interface with suspend modifier?

Not really, suspend is not strictly related to computation lifetime, see https://github.com/Kotlin/KEEP/blob/master/proposals/coroutines.md#terminology

Client can execute function asynchronously anyway.

Feel free to design your API how you prefer, it should be homogeneous in your project.