Skip to content

feat: ensure we can async-cancel all async types supported#9

Merged
k13gomez merged 1 commit intomainfrom
async-cancel
Oct 24, 2025
Merged

feat: ensure we can async-cancel all async types supported#9
k13gomez merged 1 commit intomainfrom
async-cancel

Conversation

@k13gomez
Copy link
Member

  • Implement AsyncCancellable on all supported async types
  • Ensure we can attempt at best effort to interrupt all supported async types
  • Replace WeakHashMap with Caffeine WeakKeys cache

@gemini-code-assist
Copy link

Summary of Changes

Hello @k13gomez, 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 refines the asynchronous cancellation model within the futurama library. It introduces a more comprehensive and consistent approach to interrupting various async constructs, ensuring that cancellation requests are handled effectively across different types. The changes also include an optimization to the internal state management for cancellation, leading to better resource utilization and performance.

Highlights

  • Enhanced Asynchronous Cancellation: The pull request significantly improves the cancellation capabilities for all supported asynchronous types within the futurama library, including Future, IDeref, CompletableFuture, Deferred, and core.async channels. This ensures that asynchronous operations can be interrupted more reliably and consistently.
  • Best-Effort Interruption: New mechanisms are in place to attempt best-effort interruption for all supported async types, allowing for more responsive cancellation of long-running or blocked operations.
  • Improved Cancellation State Management: The underlying storage for cancellation state has been upgraded from WeakHashMap to Caffeine WeakKeys cache. This change provides a more efficient and memory-friendly way to track the cancellation status of async items, automatically removing entries when they are no longer referenced.
  • New Load Tests for Cancellation: New load tests have been added for both async and thread tasks to thoroughly verify the robustness and performance of the enhanced cancellation logic under high concurrency.
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

@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 a robust and well-designed mechanism for cancelling various async types supported by the library. The key changes include implementing the AsyncCancellable protocol for all supported types, replacing the state management with a high-performance Caffeine cache, and refactoring the core macros to support cancellation. The test coverage has also been significantly improved. The changes are excellent overall. I have one critical comment regarding a dependency version and a medium-severity suggestion to improve consistency.

@k13gomez k13gomez force-pushed the async-cancel branch 14 times, most recently from eb0d2a3 to 5b89eba Compare October 24, 2025 17:26
@k13gomez k13gomez merged commit 8d967a3 into main Oct 24, 2025
3 checks passed
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.

2 participants