This screams of XY problem. You've gotten a new problem from using this method and you're asking for help for that, but probably there is an underlying better solution that solves your actual use case without running into this problem at all.
Transactions should be short lived, they block data on the database side from acessing those tables or rows. Best to not jole onto a transaction that long and instead gather your data first or rethink your access patterns to your data base.
But arc does give you a try_unwrap which returns the inner type if there is only one strong copy left. And mutex gives you an into_inner to move out of it. But really transactions should not be held for a long period of time.
Seems like the into_inner is the way (i see other references to it).
And yes, transactions should be short-lived, this is just about delegating it to the responsible component.
Not sure why you need an arc mutex to delegate it to the responsible component. Seems like the type of thing that should not cross thread boundaries nor be cloned multiple times.
Not talking threads here, more Tokio tasks.
You appear to be generally confused.
If you're using the multi-threaded work-stealing tokio runtime (the default), you are "talking threads". And if you aren't, Arc
and Mutex
would be useless, irregardless of whether you're doing it right or wrong.
Thanks for the correction ๐
Make sure thereโs only one strong reference and call Arc::into_inner to move it out of the Arc. Same can be done with Mutex::into_inner to move the transaction out of the mutex
Thanks! Will try that!
Rust
Welcome to the Rust community! This is a place to discuss about the Rust programming language.
Wormhole
Credits
- The icon is a modified version of the official rust logo (changing the colors to a gradient and black background)