Photon Realtimeで通信中にゲームを終了しようとするとフリーズ/クラッシュする時の対処法

おそらくPhoton Fusion, Photon Quantum, PUNあたりは裏で勝手にやってくれているはずなので対象外。

どこかのUnityバージョンから、裏でスレッドが動き続けているとゲーム終了時にフリーズやクラッシュをするようになった。
Unity Issue Tracker - [General] Terminate Unity Player is never executed when an infinite loop that increments an integer is running in IL2CPP without sleep

こんな感じでQuit時に _loadBalancingClient.LoadBalancingPeer.StopThread(); や SupportClass.StopAllBackgroundCalls(); を呼べば解決。
素直にConnectionHandler.csを使っていれば呼んでくれている。

Photon.cs
public void Start()
{
    UnityEngine.Application.quitting += StopAllThreads;
}

public void OnDestroy()
{
    UnityEngine.Application.quitting -= StopAllThreads;
}

private void StopAllThreads()
{
    if (_loadBalancingClient != null && _loadBalancingClient.IsConnected)
    {
        _loadBalancingClient.Disconnect();
        _loadBalancingClient.LoadBalancingPeer.StopThread();
        _loadBalancingClient.LoadBalancingPeer.IsSimulationEnabled = false; // works around a problem with closing the Network Sim Thread in some Unity 6 builds
    }
    SupportClass.StopAllBackgroundCalls();
}