Skip to content

fix: 修复停机后连接等待与首次注册竞态 - #75

Merged
CSJ608 merged 1 commit into
mainfrom
codex/fix-65-connected-wait
Sep 8, 2026
Merged

CSJ608 merged 1 commit into
mainfrom
codex/fix-65-connected-wait

Conversation

@CSJ608

@CSJ608 CSJ608 commented Sep 8, 2026

Copy link
Copy Markdown
Owner

Dispose(或 Start 生命周期令牌取消)完成后,WaitForConnectedAsync 原先会创建无人完成的等待器;首次注册与 Shutdown 并发也会遗漏取消。本改动在取得等待器后复查终态,迟到注册由调用路径取消,复查后的停机仍由 Shutdown 取消已发布等待器。保留接口既有任务取消语义,无公共异常/API 变更。

覆盖终态新调用、1000 次首次注册/Dispose 同步起跑竞速、调用方取消隔离、生命周期取消,以及首次连接、跨重试和已连接立即完成。更新 CHANGELOG Unreleased。

验证:

  • 最终测试对 origin/main 生产实现:8 项中 3 失败(包括竞速等待超时),5 通过;修复后全部通过。
  • dotnet build StreamFrame.slnx -c Release:零警告、零错误。
  • dotnet test StreamFrame.slnx -c Release --no-build:net8.0/net10.0/net48 各 119 通过。
  • 首轮 net48 即时状态断言忽略兼容层异步传播,已改为限时等待取消且最终核验 IsCanceled;超时仍失败。全量复查曾分别遇到原有 ReconnectWedge 和 CallerCancel_AfterCommit 网络连接失败,未修改其断言;最终全量通过。红绿切换中还纠正了一次源时间戳引起的 net8 旧产物复用。所有日志与重试保存在本机 issue-65-result.md 及旁边日志。

Closes #65

@CSJ608
CSJ608 merged commit b23b86c into main Sep 8, 2026
5 checks passed
@CSJ608
CSJ608 deleted the codex/fix-65-connected-wait branch September 8, 2026 08:36
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.

bug: [P2] Dispose 后调用 WaitForConnectedAsync 会创建永不完成的等待器

1 participant