Структура Context<'a>

Описание

Контекст асинхронной задачи.

В настоящее время Context предоставляет доступ к &Waker, который может быть использован для пробуждения текущей задачи.

Синтаксис

#![allow(unused)]
fn main() {
pub struct Context<'a> { /* приватные поля */ }
}

Методы

from_waker

#![allow(unused)]
fn main() {
pub const fn from_waker(waker: &'a Waker) -> Context<'a>
}

Создает новый Context из &Waker.

Доступность: 1.36.0 (const: 1.82.0)

waker

#![allow(unused)]
fn main() {
pub const fn waker(&self) -> &'a Waker
}

Возвращает ссылку на Waker для текущей задачи.

Доступность: 1.36.0 (const: 1.82.0)

local_waker ⚡️

#![allow(unused)]
fn main() {
pub const fn local_waker(&self) -> &'a LocalWaker
}

Возвращает ссылку на LocalWaker для текущей задачи.

Примечание: Это экспериментальное API, доступно только в ночных сборках Rust.

ext ⚡️

#![allow(unused)]
fn main() {
pub const fn ext(&mut self) -> &mut (dyn Any + 'static)
}

Возвращает ссылку на данные расширения для текущей задачи.

Примечание: Это экспериментальное API, доступно только в ночных сборках Rust.

Реализации трейтов

Debug

#![allow(unused)]
fn main() {
impl Debug for Context<'_>
}

Позволяет форматирование Context для отладки.

Автоматические реализации трейтов

  • Freeze for Context<'a> - может быть заморожен
  • RefUnwindSafe for Context<'a> - безопасен для паники
  • !Send for Context<'a> - не может быть передан между потоками
  • !Sync for Context<'a> - не может быть разделен между потоками
  • Unpin for Context<'a> - может быть безопасно перемещено
  • UnwindSafe for Context<'a> - безопасен для паники

Пример использования

#![allow(unused)]
fn main() {
use std::task::{Context, Poll, Waker};

// Создание контекста из Waker
let waker: &Waker = ...;
let cx = Context::from_waker(waker);

// Получение Waker из контекста
let waker_ref = cx.waker();
}

Назначение

Context используется в асинхронном программировании Rust для:

  • Предоставления доступа к Waker для пробуждения задач
  • Передачи контекстной информации в асинхронные операции
  • Реализации Future-трейтов

Особенности

  • Не является Send или Sync, так как привязан к конкретному исполнению
  • Содержит время жизни 'a, связанное с временем жизни Waker
  • Используется в методах poll Future-трейтов