What happens when 1 bit which is changing in Gray Code counter goes into metastability ? Why it isn't a problem in asynchronous FIFO?
You might want to take a look at Cliff Cummings's famous paper about Asynchronous FIFO Design.