active: true
derived: false
groups:
- CACHE
header: |
  同期・非同期サポートテスト
level: 2.3
links:
- SPEC003: dz6RIWFvxzoekAyT2zdKmxr0kFTkzp37wb926o_3Ip8=
normative: true
ref: ''
references:
- path: tests/integration/core/test_async_save.py
  type: file
reviewed: kePNOfUj0eS28MhXqV6t6N1bENnRIr1f7oBc4vo7Ozw=
text: |
  ## 目的

  beautyspot は同期・非同期の両方の関数を透過的にキャッシュするが、asyncio 固有のイベントループ制約（スレッドをまたぐコルーチン実行、例外伝播のタイミング差異）により、同期版とは異なる不具合が発生しやすい。非同期パスの堅牢性を独立して検証する。

  ## 検証観点

  - **自動判定**: `inspect.iscoroutinefunction()` により同期/非同期が正しく識別され、適切なラッパーが適用されること
  - **例外伝播**: async 関数内で送出された例外が、await 側に正しく伝播し、キャッシュに保存されないこと
  - **非同期 thundering herd**: 同一キーへの複数の concurrent な `await` が1回の実行結果を共有すること
  - **非同期保存**: `save_sync=False` 時に `_BackgroundLoop` 経由でキャッシュ保存が非同期実行されること
