Skip to content

feat(runtime): add async task cancellation support#495

Merged
0x676e67 merged 3 commits intomainfrom
cancel
Jan 17, 2026
Merged

feat(runtime): add async task cancellation support#495
0x676e67 merged 3 commits intomainfrom
cancel

Conversation

@0x676e67
Copy link
Copy Markdown
Owner

@0x676e67 0x676e67 commented Jan 16, 2026

close: #461

@gemini-code-assist
Copy link
Copy Markdown
Contributor

Summary of Changes

Hello @0x676e67, I'm Gemini Code Assist1! I'm currently reviewing this pull request and will post my feedback shortly. In the meantime, here's a summary to help you and other reviewers quickly get up to speed!

This pull request significantly enhances the runtime's asynchronous capabilities by integrating robust task cancellation. It refactors existing async APIs to be more explicit about cancellation, introduces custom future types to bridge Python's asyncio with Rust's concurrency model, and ensures that long-running Rust operations can be gracefully interrupted from Python. This change improves responsiveness and resource management for asynchronous operations.

Highlights

  • Asynchronous Task Cancellation: Introduced support for asynchronous task cancellation in the runtime, allowing Python's asyncio cancellation to propagate to Rust futures.
  • New future Module: Added a new src/client/future.rs module containing SpawnWithCancel and AllowThreads futures to manage cancellation and ensure Python's Global Interpreter Lock (GIL) is released during Rust async operations.
  • API Modernization: Converted all asynchronous client methods (e.g., get, post, request, websocket) and response/websocket operations (text, json, recv, send, close) to async functions, now accepting a CancelHandle for explicit cancellation management.
  • Dependency Updates: Enabled the experimental-async feature for pyo3 and added the pin-project-lite crate to facilitate async Rust code with pyo3.
  • Benchmark Metric Change: Updated benchmark result recording to report durations in milliseconds instead of seconds for finer granularity.
Using Gemini Code Assist

The full guide for Gemini Code Assist can be found on our documentation page, here are some quick tips.

Invoking Gemini

You can request assistance from Gemini at any point by creating a comment using either /gemini <command> or @gemini-code-assist <command>. Below is a summary of the supported commands on the current page.

Feature Command Description
Code Review /gemini review Performs a code review for the current pull request in its current state.
Pull Request Summary /gemini summary Provides a summary of the current pull request in its current state.
Comment @gemini-code-assist Responds in comments when explicitly tagged, both in pull request comments and review comments.
Help /gemini help Displays a list of available commands.

Customization

To customize Gemini Code Assist for GitHub experience, repository maintainers can create a configuration file and/or provide a custom code review style guide (such as PEP-8 for Python) by creating and adding files to a .gemini/ folder in the base of the repository. Detailed instructions can be found here.

Limitations & Feedback

Gemini Code Assist may make mistakes. Please leave feedback on any instances where its feedback is incorrect or counter productive. You can react with 👍 and 👎 on @gemini-code-assist comments. If you're interested in giving your feedback about your experience with Gemini Code Assist for Github and other Google products, sign up here.

You can also get AI-powered code generation, chat, as well as code reviews directly in the IDE at no cost with the Gemini Code Assist IDE Extension.

Footnotes

  1. Review the Privacy Notices, Generative AI Prohibited Use Policy, Terms of Service, and learn how to configure Gemini Code Assist in GitHub here. Gemini can make mistakes, so double check it and use code with caution.

Copy link
Copy Markdown
Contributor

@gemini-code-assist gemini-code-assist bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Code Review

This pull request introduces support for asynchronous task cancellation, a significant improvement for the library's async capabilities. The changes are well-implemented, converting many functions to async fn and using a new AllowThreads future wrapper with pyo3::coroutine::CancelHandle. This makes the async API more idiomatic and robust. I have a couple of suggestions for src/client/future.rs to make the cancellation handling even better by ensuring underlying Tokio tasks are aborted and by providing more specific error information upon cancellation.

@0x676e67
Copy link
Copy Markdown
Owner Author

/gemini review

Copy link
Copy Markdown
Contributor

@gemini-code-assist gemini-code-assist bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Code Review

This pull request introduces asynchronous task cancellation support, a significant and valuable feature for an async HTTP client. The changes are comprehensive, converting many methods to async fn and integrating pyo3's CancelHandle. A new AllowThreads future wrapper is added to manage cancellation and GIL release, which is a clean abstraction. The implementation is generally solid, and the related dependency updates in Cargo.toml are appropriate. I have one suggestion to enhance the robustness of the GIL handling in the new future.rs module. Overall, this is a well-executed feature addition.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Allow to cancel asynchronous tasks

1 participant