pub struct SideA<Req, Resp> { /* private fields */ }Expand description
Side A endpoint (request sender, response receiver)
A 方的 channel 端点(请求发送方,响应接收方)
Implementations§
Source§impl<Req, Resp> SideA<Req, Resp>
impl<Req, Resp> SideA<Req, Resp>
Sourcepub async fn request(&self, req: Req) -> Result<Resp, ChannelError>
pub async fn request(&self, req: Req) -> Result<Resp, ChannelError>
Send a request and wait for response
This method will:
- Wait for channel to be idle (if previous request is still being processed)
- Send request to side B
- Wait for side B’s response
- Return the response
发送请求并等待响应
这个方法会:
- 等待 channel 进入空闲状态(如果之前的请求还在处理中)
- 发送请求到 B 方
- 等待 B 方的响应
- 返回响应
§Returns
Ok(response): Received response from side BErr(ChannelError::Closed): Side B has been closed
§Example
let (side_a, side_b) = channel::<String, i32>();
tokio::spawn(async move {
while let Ok(guard) = side_b.recv_request().await {
let response = guard.request().len() as i32;
guard.reply(response);
}
});
let response = side_a.request("Hello".to_string()).await;
assert_eq!(response, Ok(5));Trait Implementations§
Auto Trait Implementations§
impl<Req, Resp> Freeze for SideA<Req, Resp>
impl<Req, Resp> !RefUnwindSafe for SideA<Req, Resp>
impl<Req, Resp> Send for SideA<Req, Resp>
impl<Req, Resp> Sync for SideA<Req, Resp>
impl<Req, Resp> Unpin for SideA<Req, Resp>
impl<Req, Resp> !UnwindSafe for SideA<Req, Resp>
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more