我对 Rust 比较陌生,但成功地使用Rayon并行处理数据。至少只要我正在处理现有的数据结构并且par_iter()
开箱即用。现在我已经实现了我自己的struct
,它也实现了Iterator
:
struct TaskQueue {
// ...
}
impl Iterator for TaskQueue {
type Item = QueueItem;
fn next(&mut self) -> Option<QueueItem> {
// ...
}
}
该代码适用于普通for item in queue_instance {...}
循环。我希望这足以让 Rayon 使用我的代码,但事实并非如此。我必须实现一个ParallelIterator。根据我尝试过的文档
impl ParallelIterator for TaskQueue {
type Item = QueueItem;
fn drive_unindexed<C>(self, consumer: C) -> C::Result
where C: UnindexedConsumer<QueueItem>
{
self.next().unwrap()
}
}
编译器告诉我
<C as rayon::iter::plumbing::Consumer<QueueItem>>::Result
由于返回类型而预期
带有以下提示:
注意:预期类型
<C as rayon::iter::plumbing::Consumer<QueueItem>>::Result
找到类型QueueItem
注意:考虑将关联类型约束
<C as rayon::iter::plumbing::Consumer<QueueItem>>::Result
为QueueItem
或调用返回的方法<C as rayon::iter::plumbing::Consumer<QueueItem>>::Result
注意:有关更多信息,请访问https://doc.rust-lang.org/book/ch19-03-advanced-traits.html
就我的理解而言::Result
,应该是QueueItem
,而且我(还)不能从关于高级特征的章节中理解。我必须如何实现该drive_unindexed
功能才能使我的代码与 Rayon 一起使用?