I have been building a Constructive Solid Geometry renderer in Unity that does most of the hard calculation work on the GPU. So long as I can keep both the data and the computation on the GPU things go well. Unfortunately, I occasionally need to get a small amount of data back from the GPU to the CPU. I've tried using both ComputeBuffer.GetData and Texture2D.ReadPixels to do this and they both take many milliseconds to return a single word of data. I'm pretty sure the reason for the slowness is that the GPU stalls while reaching a sync point before delivering the data. I don't need to get the data immediately when I call. I am happy with several frames of delay before I receive the data. However, I am not happy with the frame rate stutters this causes in my app. I've tried all sorts of ways of rearranging these calls to give the GPU time to complete filling the buffers before the call, but nothing seems to help. What I would like is an asynchronous version of either the ComputeBuffer.GetData method or of the Texture2D.ReadPixels function (although the Texture2D one seems less likely to work). To be more concrete, right now I retrieve the data by calling: myComputeBuffer.GetData(myDataBuffer); This function stalls for a couple of milliseconds and then returns the data. I'd like to call something like: myComputeBuffer.GetData( (Array data) => HandleData(data)); In this case it may take 10s of milliseconds before my HandleData callback is invoked, but there wouldn't be any GPU pauses in the meantime. Does this request make sense? Is there a way to do this currently that I just haven't figured out? My current scary solution idea is to write a native plugin that uses the underlying DirectX11 asynchronous read functions in order to make this work. However, that looks like a world of conflicting memory and multi-threading pain that I'd love to avoid if there was a better approach.