![](/img/trans.png)
[英]ASP.NET Core 6 Minimal web API Deploy To IIS
[英]Running separate process in ASP.NET Core Web Minimal API
我有一个长时间运行的进程,我想添加一个 REST api 到。 通过 API 我希望能够检查长时间运行过程中变量的值。
我使用最小 API 组合了一个概念证明:
public class Program
{
public static int val = 0;
public static object locker = new object();
public static void Main(string[] args)
{
Task.Run(() =>
{
while (true)
{
lock (locker)
{
val++;
}
Thread.Sleep(100);
}
});
var builder = WebApplication.CreateBuilder(args);
var app = builder.Build();
app.MapGet("/", () =>
{
lock (locker)
return val;
});
app.Run();
}
}
我的想法是让我长时间运行的进程的代码在 Task.Run 中运行。 我这样做是对的吗? 我尝试做的事情是否有任何潜在的陷阱/陷阱?
您可以创建一个包含 state 的服务,您可以从 API 访问该服务。windows 服务/托管服务非常适合“长时间运行的进程”,它可以托管您的 API: 文档。
价值服务.cs
为长时间运行的进程实施BackgroundService
。
public class ValueService : BackgroundService
{
private int _val;
public int Value
{
get { return _val; }
set { _val = value; }
}
protected override async Task ExecuteAsync(CancellationToken stoppingToken)
{
while (!stoppingToken.IsCancellationRequested)
{
await Task.Delay(TimeSpan.FromSeconds(5), stoppingToken);
Value++;
}
}
}
程序.cs
注册您的服务并注册服务提供商的检索。
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddSingleton<ValueService>();
builder.Services.AddHostedService(p => p.GetService<ValueService>()!);
var app = builder.Build();
在你的 API 中注入服务:
app.MapGet("/", (ValueService valueService) =>
{
return valueService.Value;
});
app.Run();
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.