J'ai ce traitaccès à ExecutionContext
trait NonBlockingGoodness extends DataStore {
import akka.dispatch.{ Future, ExecutionContext }
import akka.util.duration._
import akka.util.Timeout
implicit val ec = ExecutionContext.fromExecutorService(yourExecutorServiceGoesHere)
implicit lazy val timeout = Timeout(5 seconds)
}
Je voudrais accéder au ExecutionContext
dans un autre trait comme tel
trait AsyncGoodness extends NonBlockingGoodness {
import akka.dispatch.Future
def doSomething = {
Future { "Future is the bomb." }
}
Cependant, je reçois l'erreur
Could not find implicit value for parameter executor: akka.dispatch.ExecutionContext
MISE À JOUR: J'ai compris h omment obtenir le ExecutionContext
portée
trait AsyncGoodness extends NonBlockingGoodness {
import akka.dispatch.ExecutionContext
import akka.dispatch.Future
def doSomething()(implicit executor: ExecutionContext) = {
Future { "Future is the bomb." }
}
Cependant, j'ai une question de suivi. Depuis que je peux avoir plus de 1 méthode en AsyncGoodness
qui utilise ExecutionContext
, est-il un moyen de le transmettre au niveau trait
au lieu de chaque méthode comme je l'ai fait ci-dessus.
Juste une remarque qui passe: votre nom NonBlockingGoodness implique que tout blocage est mauvais. C'est une croyance courante de nos jours mais elle est un peu naïve: les E/S non bloquantes peuvent être pires que les E/S bloquantes dans certains cas. D'autres problèmes, tels que l'excès de parallélisme et le fait d'avoir (ou non) des pools de threads bien réglés et même d'éviter le piège de la loi d'Amdahl, doivent être pris en considération. Voici une histoire de cas: http://www.bigbeeconsultants.co.uk/blog/dispatch-http-critique –
Est-il suffisant qu'être non-bloquant soit bon dans le contexte où il l'utilise? Ou avez-vous considéré que le nom signifie simplement que ce trait fait du bien, et qu'il arrive juste à le faire non-bloquant? Qu'est-ce que c'est, Tumblr? – hoff2