What you need to do is to prevent any calls that use the OpenGL context while the app is in the background, because during that time there simply is no OpenGL context.
What you could do is to store the current background state (yes or no) and if the game is in the background while an async block runs, the block should instead queue itself to a "Post-Background-Scheduler" class which will then run the block again and dequeue it when the game comes back to the foreground.
Or, if this is only concerning textures, you could simply add each texture to an array and queue them for caching. Then when the game goes into background the queue simply stops dequeuing and resumes dequeuing when the game is in the foreground.