Hi Konrad,

Thanks for the reply.

Here's a quote from Akka docs on Actors:

-------------
Warning
When using future callbacks, such as onComplete, onSuccess, and onFailure, 
inside actors you need to carefully avoid closing over the containing 
actor’s reference, i.e. do not call methods or access mutable state on the 
enclosing actor from within the callback. This would break the actor 
encapsulation and may introduce synchronization bugs and race conditions 
because the callback will be scheduled concurrently to the enclosing actor. 
Unfortunately there is not yet a way to detect these illegal accesses at 
compile time. See also: Actors and shared mutable state
-------------

I want to fix this: 

"because the callback will be scheduled concurrently to the enclosing actor"

by executing callbacks via actor messages - so that code inside Future 
callbacks could be thread safe in the same way as usual actor message 
handling code without Futures.


On Tuesday, August 5, 2014 11:32:45 PM UTC+7, Konrad Malawski wrote:

> Hi Oleg,
> This is a bit confusing – why would you need this? 
> What is this supposed to be helping with?
>
> The simplest way to get an execution context for a Future to run on is 
> `import context.dispatcher` which makes it run on the same dispatcher as 
> the Actor.
> Of course, that's not always what you want, so in Akka you can defined 
> dispatchers in configuration and then look them up by name, then use them 
> for your Futures.
> Please refer to the Dispatchers 
> <http://doc.akka.io/docs/akka/2.3.4/scala/dispatchers.html> section of 
> the docs.
>
> Hope this helps, and if not, please explain in more detail what you are 
> trying to achieve :-)
>
>
> On Tue, Aug 5, 2014 at 3:35 PM, Oleg Galako <ojo...@gmail.com 
> <javascript:>> wrote:
>
>> Greetings!
>>
>> Looks like Futures inside actors are better than splitting async 
>> processing into several message steps (which requires naming messages, 
>> passing context in them, etc).
>>
>> Is there something wrong with this code or maybe something like that 
>> already implemented in a better way?
>>
>> case class ExecuteRunnable(r: Runnable)
>> class AnotherActor extends Actor {
>>     def withCustomEC(f: ExecutionContext => Receive): Receive = {
>>
>>       def handleExecuteRunnable: Receive = {
>>         case ExecuteRunnable(r) => println("Handling ExecuteRunnable"); 
>> r.run()
>>       }
>>
>>       handleExecuteRunnable orElse  f(new ExecutionContext {
>>         override def execute(runnable: Runnable) = {
>>           println("Sending ExecuteRunnable")
>>           self forward ExecuteRunnable(runnable)
>>         }
>>         override def reportFailure(t: Throwable) = ???
>>       })
>>     }
>>
>>     override def receive = withCustomEC(implicit ec => {
>>         case _ =>
>>           println("got msg")
>>           Future { 42 }.foreach(_ => println("Future completed"))
>>     })
>> }
>>
>>
>>  -- 
>> >>>>>>>>>> Read the docs: http://akka.io/docs/
>> >>>>>>>>>> Check the FAQ: 
>> http://doc.akka.io/docs/akka/current/additional/faq.html
>> >>>>>>>>>> Search the archives: https://groups.google.com/group/akka-user
>> --- 
>> You received this message because you are subscribed to the Google Groups 
>> "Akka User List" group.
>> To unsubscribe from this group and stop receiving emails from it, send an 
>> email to akka-user+...@googlegroups.com <javascript:>.
>> To post to this group, send email to akka...@googlegroups.com 
>> <javascript:>.
>> Visit this group at http://groups.google.com/group/akka-user.
>> For more options, visit https://groups.google.com/d/optout.
>>
>
>
>
> -- 
> Cheers,
> Konrad 'ktoso' Malawski
> hAkker @ Typesafe
>
> <http://typesafe.com>
>  

-- 
>>>>>>>>>>      Read the docs: http://akka.io/docs/
>>>>>>>>>>      Check the FAQ: 
>>>>>>>>>> http://doc.akka.io/docs/akka/current/additional/faq.html
>>>>>>>>>>      Search the archives: https://groups.google.com/group/akka-user
--- 
You received this message because you are subscribed to the Google Groups "Akka 
User List" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to akka-user+unsubscr...@googlegroups.com.
To post to this group, send email to akka-user@googlegroups.com.
Visit this group at http://groups.google.com/group/akka-user.
For more options, visit https://groups.google.com/d/optout.

Reply via email to