Структура 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