Bank load status functions in RuntimeManager erroneously report banks as loaded while loading asynchronously

I’ve been implementing some pretty granular bank loading in a project that is shipping on mobile, and I have been having some troubles with manually handling bank loading.

For a start, the RuntimeManager.LoadBank() function is thread-blocking by default. I had to modify this to include an option for specifying loading flags, so that I would be able to set banks to load using NONBLOCKING instead of NORMAL

That’s fine, but then I found that if I set a bank to load with the NONBLOCKING flag, then immediately query the HasBankLoaded(), HaveAllBanksLoaded(), or AnySampleDataLoading() functions in the RuntimeManager, each of them will report that the bank has finished loading right away, even though the asynchronous load hasn’t completed.

I believe that this is the case because I’m running a coroutine that checks for the status of bank loading and creates an instance of a sound once its bank has loaded, and when I set the bank to load asynchronously, it attempts to fire off the event too early, erroring out. It doesn’t matter whether I check any or all of those functions, the result is the same.

In cases where I can know in advance that a bank will be required shortly, this isn’t an issue. But for the cases where I need to load a bank and play a sound from it as soon as possible, I have had to load these banks with the NORMAL flag, which is far from ideal.

One other thing to note is that the load times of the banks using thread-blocking loading are clearly visible in the Unity Profiler using Deep Profiling, but that they show no impact at all in the FMOD Profiler, which seems odd — in fact, the memory read-out in the FMOD Profiler doesn’t change when I load and unload banks either, further adding to my confusion.

Is there a way to reliably check whether an async bank is currently loading?

For context, I’m working in Unity 6000.0.55f1 and FMOD 2.02.18