我的情况与Unable to tokio::run a boxed Future because the trait bound Send is not satisfied相似:我想在tokio::run
未实现Box<T: Future ...>
的{{1}}类型上使用T
。
我的情况有所不同,因为我没有编写返回我的Send
的方法,因此无法更改其方法签名。它执行Web请求并返回该装箱的将来:
Box
请注意缺少pub fn get_resource(&self,) -> Box<Future<Item = RestStruct, Error = Error<serde_json::Value>>>
。
对于Tokio documentation,我需要对盒装类型实现Send
,即使将来的关联类型为Send
,这也不是自动的:
精明的读者可能会注意到
Send
定义中明确的Send
特质标记。之所以添加该符号,是因为默认情况下Box
并未明确地Future
;这会在以后尝试将此未来或其衍生之一传递给Send
时引起问题。
我在找出适当简洁的方法时遇到了麻烦。这些路线似乎应该起作用:
tokio::run
我收到许多令人惊讶的错误。我将在下面详细介绍它们,但是我的问题通常可以用短语来表达,我该如何指定:在某些特征范围内满足给定第一个特征的任何类型还必须隐式满足第二个特征?
我的解决方案产生的错误:
特征
impl<T, I, E> Send for T where T: Future<Item = I, Error = E>, I: Send, E: Send, { }
需要一个std::marker::Send
声明
我想我了解一个基于unsafe impl
的文档,尽管需要澄清:这确实构成了一个described there的“正确实现的Send
”,因为相关的类型是Send
?
类型参数
Send
必须用作某些本地类型(例如T
)的类型参数
我知道这与newtype workaround as described in the docs有关,如果这样做的话,它确实会妨碍我要做的事情。这是否意味着我无法完成我想要的?是否有类似类型别名的有界特征可以解决此问题?
类型为
MyStruct<T>
的特征std::marker::Send
的冲突实现
那一个,我一点都不明白。 &_
的类型要比我尝试使用所有这些&_
边界指定的受约束类型大得多;我不希望where
是&_
。