What's the point of the various …WhenCallbackReturns functions?

Raymond Chen

The thread pool provides a number of functions named ...When­Callback­Returns. What’s the point of all these functions? Why can’t you just do the operation yourself immediately before returning? We saw Free­Library­When­Callback­Returns last time. What’s the point of the others?

Basically, the same thing as Free­Library­When­Callback­Returns. It’s a way to release a resource after execution has left the function and the callback is marked as complete. In the case of a synchronization resource, that resource may be what’s keeping somebody from unloading your DLL, or it might protect a race condition between the callback function and a function that tries to cancel the callback.