Skip to content

Analyzer: Detect using Task<T> with RequestDelegate #42523

Closed
@JamesNK

Description

@JamesNK

Is there an existing issue for this?

  • I have searched the existing issues

Is your feature request related to a problem? Please describe the problem.

RequestDelegate can be used with methods/lambdas that return a value which is then ignored.

Delegate signature:

/// <summary>
/// A function that can process an HTTP request.
/// </summary>
/// <param name="context">The <see cref="HttpContext"/> for the request.</param>
/// <returns>A task that represents the completion of request processing.</returns>
public delegate Task RequestDelegate(HttpContext context);

Because Task is the base type of Task<T>, generic variance means it's possible to do this:

Task<string> HelloWorld(HttpContext c) => Task.FromResult("Hello " + c.Request.RouteValues["name"]);

// The compiler prefers RequestDelegate overload over the Delegate overload.
// The return value is never used. Not what the user expects.
endpoints.MapGet("/", HelloWorld);

Example: #39956

Describe the solution you'd like

Write an analyzer that detects using a method or lambda that returns Task<T> with RequestDelegate and warns the user.

Additional context

No response

Metadata

Metadata

Assignees

Labels

analyzerIndicates an issue which is related to analyzer experienceold-area-web-frameworks-do-not-use*DEPRECATED* This label is deprecated in favor of the area-mvc and area-minimal labels

Type

No type

Projects

No projects

Relationships

None yet

Development

No branches or pull requests

Issue actions