Start here. This is the direct spoken answer to practice first.
Why this question matters
HttpContext represents mutable state owned by one active request. Making it globally reachable does not extend that request's valid lifetime or make concurrent access safe.
I use HttpContext only while the request is active and avoid storing it in fields or passing it into background work. It is not thread-safe, so concurrent tasks must not read and write its request, response, items, or user state without a clear request-owned sequence. If later work needs identity or correlation data, I copy the specific immutable values, such as user ID, tenant ID, trace ID, and culture, into an explicit message or command before the request ends.