run<R> static method

R run<R>(
  1. Request request,
  2. R body()
)

Run anything inside this request context.

This establishes a zone where the request is available via RequestContext.request. The function will be executed and any request-scoped data will be cleaned up automatically when the function completes.

Example:

return RequestContext.run(request, () {
  // Now RequestContext.request is available
  final userId = RequestContext.userId;
  return processRequest();
});

Implementation

static R run<R>(Request request, R Function() body) {
  final stopwatch = Stopwatch()..start();
  try {
    return runZoned(
      () {
        final result = body();
        return result;
      },
      zoneValues: {
        ServerContext.zoneKey: ServerContext(request: request),
      },
    );
  } finally {
    stopwatch.stop();
    // Optional: Log slow requests
    if (stopwatch.elapsedMilliseconds > 1000) {
      Khadem.logger.warning(
        '[RequestContext] Slow request: ${request.method} ${request.path} took ${stopwatch.elapsedMilliseconds}ms',
      );
    }
  }
}