アイテムなどの選択用のボタンを4つ(実際には複数個)生成し、それにデリゲートとして SelectItem メソッドを渡すことで、ボタン側と一覧表示用ポップアップ側の直接の依存関係を断っています。
その後、選択のボタンを押すと SelectItem メソッドが動き、併せて、選択されたボタンの情報が渡ってきます。
ここで確認用ポップアップを開き、ポップアップ内にある「決定」「キャンセル」のいずれかのボタンが押されるまで待機します。
ほかの処理が止まるので、ゲーム内の処理を止め、ボタンの選択を待てる状況で使う前提です。
SetupConfirmPopup メソッドで
ボタン自体の役割を設定しつつ、その結果が何に使われるかは認知せずに一覧表示用ポップアップ側に押したボタンの状態(決定かキャンセルか)フィードバックします。
ConfirmPopup.cs 64 行目
// ボタンの押下結果を待機(Channel のキューに値が入っていたら1つ取り出すまで待機)
bool result = await confirmationChannel.Reader.ReadAsync();
この ReadAsync を使って Channel に書き込むタイミングを非同期で待っているのですが、
今回の場合、
ボタン押下時に書きこみをリンクさせているので、ボタンを押すまで待機する、という挙動になっています。