Open litcc opened 2 hours ago
在某些 async trait 的情况下,Context 不能安全的在多线程中传递,无法在任何使用#[async_trait::async_trait]的函数参数中使用,只能在类似下方这种声明的函数中才可以正常使用
pub trait AB{ fn abc( _cx: &mut Context, ... ) -> impl Future<Output = Result<...>>{ let ddd = cx.resolve::<...>(); // 只能通过在async 外使用后移动进去,但是这样的话如果存在一些需要使用async初始化的示例时也会报错 async move{ // 在这里不能使用 Context,会爆一大堆错 } } }
对于 rudi::Context 内部的 Box 是否有计划添加 Send+Sync
rudi::Context
Context 只是提供一个自动构造实例的场所,应该放在程序的最开头,构造完需要的实例了,就没用了。不应该把一个场所传来传去。
emm,我目前就是这么使用的,但开头存在一些复杂的 async trait 来抽象某些功能的情况下会出现这种情况
那就不要在 async trait 中的 async fn 上添加 Send 限定,可以看看我写的 代码
在某些 async trait 的情况下,Context 不能安全的在多线程中传递,无法在任何使用#[async_trait::async_trait]的函数参数中使用,只能在类似下方这种声明的函数中才可以正常使用
对于 是否有计划添加 Send+Sync
rudi::Context
内部的 Box