/Engine/Source/Runtime/Core/Public/ProfilingDebugging/CookStats.h
Async tasks can sometimes actually be executed synchronously if the code ends up waiting on the results before the task can even get started. Either way, this should be treated as "async" wait time. Be sure not to double count this time. Basically, do your counting at the level that decides whether to execute the work synchronously or not, so you can be sure to track the time properly as SyncWork or AsyncWait.
struct FDerivedDataUsageStats
FCookStats::Cal...
AsyncWaitStats
FCookStats::Cal...
SyncWorkStats
Expose these publicly for low level access. These should really never be accessed directly except when finished accumulating them.