Есть идеи, почему foo возвращает пустое тело?

По какой-то причине foo всегда возвращает пустое тело:

      internal static async Task<string> Foo(HttpContext context)
{
    var response = await Task.Run(() => { return "response"; });
    return response;
}

internal static async Task<string> Bar(HttpContext context, string someParam)
{
    var response = await Task.Run(() => { return "response"; });
    return response;
}

3 ответа

Мне удалось воспроизвести поведение - перемещение обработчика с одним параметром HttpContextв отдельном методе приводит к пустому ответу:

      WebApplicationBuilder builder = WebApplication.CreateBuilder();
WebApplication app = builder.Build();
app.Map("/Fails", Fails);
app.Map("/Fails1", Fails1);
app.Map("/Works", async (HttpContext c) =>
{
    var response = await Task.Run(() => { return "response"; });
    return response;
});
app.Map("/WorksToo", Works);
app.Map("/WorksToo1", Works1);
app.Map("/WorksToo2", Works2);
app.Run();
static async Task<string> Fails1(HttpContext context)
{
    var response = await Task.FromResult("response");
    return response;
}
public partial class Program
{
    internal static async Task<string> Fails(HttpContext context) => await Task.FromResult("response");

    internal static async Task<string> Works(HttpContext context, string someParam) => await Task.FromResult("response");

    internal static async Task<string> Works1(HttpContext context, ILogger<Program> _) => await Task.FromResult("response");

    internal static async Task<string> Works2(HttpRequest context) => await Task.FromResult("response");
}

Вышел новый выпуск на github. На данный момент вы можете добавить фиктивный параметр в обработчик, как я делаю с Works1.

Это было подтверждено как ошибка платформы, которая будет исправлена ​​в .NET 7.0. Тем временем я добавляю в обработчик фиктивный параметр.

Возможно, вам придется дождаться завершения задачи, чтобы увидеть, что установлено в свойстве Result возвращенного экземпляра Task .

Я написал почти такой же код в консольном приложении (без параметра HttpContext ), и я заметил, что когда вы используете свойство Result в своем коде, результат, возвращаемый вашим методом Foo() , присутствует. Это может привести к тому, что задача будет ждать завершения.

Ссылка: https://www.pluralsight.com/guides/using-task-run-async-await

Другие вопросы по тегам