Can constant memory be written to safely while cuda kernel is running?

I have a persistent thread based cuda kernel which runs indefinitely. I wish to communicate some data to this kernel using constant memory (for performance reasons I am not using host pinned memory). Can the running cuda kernel see the updates in constant memory (I am using cudaMemcpyToSymbolAsync() and cudaStreamSynchronize())?. I see zeros on constant memory (within device) though I am copying data from host.

No, there is no guarantee that your data will ever be visible to the kernel, unless it was present in constant memory when the kernel was launched.