fix: use futuresunordered instead of bespoke waker system
This commit is contained in:
1 parent
ff697d41e3
commit
bd720e2268
12 files changed
+308
-272
No files matched your search
@@ -1,4 +1,6 @@
|
||||
use super::{waker::ArcWake, SchedulerMsg};
|
||||
use futures_util::task::ArcWake;
|
||||
|
||||
use super::SchedulerMsg;
|
||||
use crate::ElementId;
|
||||
use crate::{innerlude::Mutations, Element, ScopeId};
|
||||
use std::future::Future;
|
||||
@@ -40,11 +42,16 @@ pub(crate) struct SuspenseLeaf {
|
||||
pub(crate) tx: futures_channel::mpsc::UnboundedSender<SchedulerMsg>,
|
||||
pub(crate) notified: Cell<bool>,
|
||||
pub(crate) task: *mut dyn Future<Output = Element<'static>>,
|
||||
pub(crate) waker: Arc<SuspenseHandle>,
|
||||
}
|
||||
|
||||
impl ArcWake for SuspenseLeaf {
|
||||
pub struct SuspenseHandle {
|
||||
pub(crate) id: SuspenseId,
|
||||
pub(crate) tx: futures_channel::mpsc::UnboundedSender<SchedulerMsg>,
|
||||
}
|
||||
|
||||
impl ArcWake for SuspenseHandle {
|
||||
fn wake_by_ref(arc_self: &Arc<Self>) {
|
||||
arc_self.notified.set(true);
|
||||
_ = arc_self
|
||||
.tx
|
||||
.unbounded_send(SchedulerMsg::SuspenseNotified(arc_self.id));
|
||||
|
||||
Reference in new issue
Block a user