pub trait AsyncTaskPool<O: Default + 'static = ()>:
Default
+ Send
+ Sync
+ 'static {
type Pool: AsyncTaskPoolExt<O> + AsyncTaskPool<O>;
// Required methods
fn get_thread_id(&self) -> usize;
fn len(&self) -> usize;
fn push(&self, task: Arc<AsyncTask<Self::Pool, O>>) -> Result<()>;
fn push_local(&self, task: Arc<AsyncTask<Self::Pool, O>>) -> Result<()>;
fn push_priority(
&self,
priority: usize,
task: Arc<AsyncTask<Self::Pool, O>>,
) -> Result<()>;
fn push_keep(&self, task: Arc<AsyncTask<Self::Pool, O>>) -> Result<()>;
fn try_pop(&self) -> Option<Arc<AsyncTask<Self::Pool, O>>>;
fn try_pop_all(&self) -> IntoIter<Arc<AsyncTask<Self::Pool, O>>>;
fn get_thread_waker(&self) -> Option<&Arc<(AtomicBool, Mutex<()>, Condvar)>>;
}Expand description
异步任务池
Required Associated Types§
type Pool: AsyncTaskPoolExt<O> + AsyncTaskPool<O>
Required Methods§
Sourcefn get_thread_id(&self) -> usize
fn get_thread_id(&self) -> usize
获取绑定的线程唯一id
Sourcefn push_priority(
&self,
priority: usize,
task: Arc<AsyncTask<Self::Pool, O>>,
) -> Result<()>
fn push_priority( &self, priority: usize, task: Arc<AsyncTask<Self::Pool, O>>, ) -> Result<()>
将指定了优先级的异步任务加入任务池
Sourcefn push_keep(&self, task: Arc<AsyncTask<Self::Pool, O>>) -> Result<()>
fn push_keep(&self, task: Arc<AsyncTask<Self::Pool, O>>) -> Result<()>
将一次唤醒或托管延期唤醒产生的一个可运行任务入队。
每次成功调用准确拥有一个物理队列项。托管 AsyncTask 状态会在调用本方法前
合并重复唤醒;自定义任务池不得自行增加轮询或重复队列项。返回 Err 表示
运行时无法保证该次唤醒的进度,因为本特征会消费任务 Arc,不能返还所有权。
供运行时使用的实现必须线程安全,不得与 Future::poll 重入,并应在唤醒热路径
上保持不阻塞/O(1)。实现不得调用用户代码或通知多个工作线程;工作线程通知由
运行时在成功入队后执行。
Sourcefn get_thread_waker(&self) -> Option<&Arc<(AtomicBool, Mutex<()>, Condvar)>>
fn get_thread_waker(&self) -> Option<&Arc<(AtomicBool, Mutex<()>, Condvar)>>
获取本地线程的唤醒器
Dyn Compatibility§
This trait is not dyn compatible.
In older versions of Rust, dyn compatibility was called "object safety".