How to calculate hash of a file at right time (or right way)?

My minifilter driver is watching %temp% path, if any file’s content in that path change, minifilter driver will send a message (contain file path) at Pre-Cleanup callback to a usermode-app. Then usermode-app will open and calculate hash of that file, the usermode-app open with GENERIC_READ and full share access (FILE_SHARED_READ|WRITE|DELETE).

The problem is when my usermode-app opened and calculating file, that file may be opening by another process and cause that process fail at some operation. The study case is install visual studio, this make the installation fail.

I’m thinking about solution: after minifilter was sent information to usermode-app, driver wait for hash calculation done (with timeout). But this will make System run slower.
I don’t know how and when to calculate hash of file correctly, please give me a suggest, thank you!