Open Thomasdezeeuw opened 3 years ago
Some context: Spawn
should be able to be used in functions that start actors. For example:
fn start_my_actor<S>(spawn: S)
where
S: Spawn<MySupervisor, MyActor, ThreadLocal>
{
// ...
}
The problem here is that MyActor
for asynchronous function can't be named. MySupervisor
is also a bit hard when using a regular function.
In pr #433 I reviewed the trait again, but I didn't see any to move the S
and NA
parameters to the methods. Punting this until after the first release.
In commit c33ed02ac860ecf0c0e3ccf16c9caefd1ae29b70 (issue #279) a new
Spawn
trait was introduced. It comes with three generic parametersS
(Supervisor
),NA
(NewActor
) andRT
(eitherThreadLocal
orThreadSafe
). This was required because spawn of thread-safe actors requires,S
,NA
andNA::Actor
to beSend + Sync
, while thread-local actors don't have this requirement. However when using async function as actor we can't nameNA
orNA::Actor
, making this trait impossible to use with it.My initial idea was to split the two traits:
Spawn
andSpawnLocal
, but types likeTcpServer
need a single trait otherwise we have to implement that twice as well.