构建基本的 ASP.NET Core Minimal API 时,我惊讶地发现,如果端点返回Task
,则请求直到Task
完成才会返回:
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddSingleton<ICounterService, CounterService>();
var app = builder.Build();
app.MapGet("/counter/value", (ICounterService counter) => counter.Value);
app.MapGet("/counter/incrementnow", (ICounterService counter) => counter.Increment());
app.MapGet("/counter/incrementlater", (ICounterService counter) => Task.Delay(TimeSpan.FromSeconds(5)).ContinueWith(_ => counter.Increment()));
app.MapGet("/counter/incrementlaternowait", (ICounterService counter) => { Task.Delay(TimeSpan.FromSeconds(5)).ContinueWith(_ => counter.Increment()); return; });
app.Run();
interface ICounterService
{
int Value { get; }
void Increment();
}
class CounterService : ICounterService
{
public int Value { get; private set; }
public void Increment()
{
int previousValue = Value++;
Console.WriteLine($"Incremented from {previousValue} to {Value}.");
}
}
这种行为记录在哪里?
await
如果我在端点中明确执行该任务,我就会期待这种行为async
。