Структура ContextBuilder<'a>
Описание
⚡️ Это экспериментальное API, доступно только в ночных сборках Rust.
ContextBuilder - это строитель, используемый для создания экземпляра Context с поддержкой LocalWaker.
Синтаксис
#![allow(unused)] fn main() { pub struct ContextBuilder<'a> { /* приватные поля */ } }
Методы
from_waker ⚡️
#![allow(unused)] fn main() { pub const fn from_waker(waker: &'a Waker) -> ContextBuilder<'a> }
Создает ContextBuilder из Waker.
from ⚡️
#![allow(unused)] fn main() { pub const fn from(cx: &'a mut Context<'_>) -> ContextBuilder<'a> }
Создает ContextBuilder из существующего Context.
waker ⚡️
#![allow(unused)] fn main() { pub const fn waker(self, waker: &'a Waker) -> ContextBuilder<'a> }
Устанавливает значение для waker в Context.
local_waker ⚡️
#![allow(unused)] fn main() { pub const fn local_waker( self, local_waker: &'a LocalWaker, ) -> ContextBuilder<'a> }
Устанавливает значение для local_waker в Context.
ext ⚡️
#![allow(unused)] fn main() { pub const fn ext(self, data: &'a mut (dyn Any + 'static)) -> ContextBuilder<'a> }
Устанавливает значение для данных расширения в Context.
build ⚡️
#![allow(unused)] fn main() { pub const fn build(self) -> Context<'a> }
Собирает Context.
Примеры
#![allow(unused)] #![feature(local_waker)] fn main() { use std::task::{ContextBuilder, LocalWaker, Waker, Poll}; use std::future::Future; let local_waker = LocalWaker::noop(); let waker = Waker::noop(); let mut cx = ContextBuilder::from_waker(&waker) .local_waker(&local_waker) .build(); let mut future = std::pin::pin!(async { 20 }); let poll = future.as_mut().poll(&mut cx); assert_eq!(poll, Poll::Ready(20)); }
Реализации трейтов
Debug
#![allow(unused)] fn main() { impl<'a> Debug for ContextBuilder<'a> }
Позволяет форматирование ContextBuilder для отладки.
Автоматические реализации трейтов
Freeze for ContextBuilder<'a>- может быть заморожен!RefUnwindSafe for ContextBuilder<'a>- не безопасен для паники по ссылке!Send for ContextBuilder<'a>- не может быть передан между потоками!Sync for ContextBuilder<'a>- не может быть разделен между потокамиUnpin for ContextBuilder<'a>- может быть безопасно перемещено!UnwindSafe for ContextBuilder<'a>- не безопасен для паники
Назначение
ContextBuilder используется для:
- Гибкого создания
Contextс различными компонентами - Настройки
LocalWakerиWakerнезависимо друг от друга - Добавления данных расширения в контекст
- Создания специализированных контекстов для тестирования
Особенности
- ⚡️ Все методы помечены как экспериментальные
- Использует fluent interface для цепочки вызовов
- Позволяет тонкую настройку компонентов
Context - Полезен для advanced сценариев работы с асинхронностью
Примечания
- Требует включения фич
local_wakerи/илиcontext_ext - Основное применение - тестирование и кастомные исполнители
- Предоставляет более гибкую альтернативу прямому созданию
Context