Multithreaded acess to rendertarget

What is the proper way to ensure a render target is ready to be read by the cpu? I have a target that I render to, then generate mips with RHICmdList.GenerateMips. Follow it with a render command fence ( RenderTargetForTextureTypeFence.BeginFence(true/*bSyncToRHIAndGPU*/)) that a task thread waits on before locking the texture to use on cpu. I sometimes get no data (black pixels) on every mip except the largest.

We are on d3d11 on PC.