You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Is your feature request related to a problem? Please describe.
The tokio actor pattern described in @Darksonn's blog post is very useful and pervasive. But one use-case that I've struggled with is when the actor needs to send messages to itself. A mpsc::Sender<ActorMessage> (by way of MyActorHandle) can be cloned into the actor body, but then RAII of Sender copies can no longer be relied on as a signal to shut the actor down, since it will always hold a Handle to itself.
Describe the solution you'd like
Ideally, the actor could retain a "weak" Sender such that it does not count in RAII semantics (when the Receiver should terminate). The mpsc Sender variants could offer a ::downgrade API, similar to Arc::downgrade in stdlib.
Or, if a separate type isn't viable, perhaps [unsafe] mutation of the internal Sender count could be exposed, such as Arc::decrement_strong_count.
Describe alternatives you've considered
Currently, we roll our own actor-rx Stream which selects on both the RAII Sender, as well as a separate actor Sender:
Is your feature request related to a problem? Please describe.
The tokio actor pattern described in @Darksonn's blog post is very useful and pervasive. But one use-case that I've struggled with is when the actor needs to send messages to itself. A
mpsc::Sender<ActorMessage>
(by way ofMyActorHandle
) can be cloned into the actor body, but then RAII of Sender copies can no longer be relied on as a signal to shut the actor down, since it will always hold a Handle to itself.Describe the solution you'd like
Ideally, the actor could retain a "weak" Sender such that it does not count in RAII semantics (when the Receiver should terminate). The mpsc Sender variants could offer a
::downgrade
API, similar toArc::downgrade
in stdlib.Or, if a separate type isn't viable, perhaps [unsafe] mutation of the internal Sender count could be exposed, such as
Arc::decrement_strong_count
.Describe alternatives you've considered
Currently, we roll our own actor-rx Stream which selects on both the RAII Sender, as well as a separate actor Sender:
This works, but adds extra complexity, and we lose out on being able to use native tokio Receiver functionality within the actor.
Additional context
This feature was previously requested in #1637, but was never followed-up on by the author and was subsequently closed.
This idea was also floated for stdlib's
mpsc
in RFC rust-lang/rfcs#1549, but doesn't seem to have made any progress.The text was updated successfully, but these errors were encountered: