C# 如何从.net core中的工作进程返回响应
我在.NETCore中创建了一个worker,它计算斐波那契级数。但是我需要能够阅读这个系列文章,作为这个工作者的回应。我对这一点很陌生,所以经过几个小时的研究,我找不到解决办法 这是我的密码:C# 如何从.net core中的工作进程返回响应,c#,.net-core,.net-core-3.0,C#,.net Core,.net Core 3.0,我在.NETCore中创建了一个worker,它计算斐波那契级数。但是我需要能够阅读这个系列文章,作为这个工作者的回应。我对这一点很陌生,所以经过几个小时的研究,我找不到解决办法 这是我的密码: public class FibonacciCalculateWorker : BackgroundService { private readonly ILogger<FibonacciCalculateWorker> _logger; public Fibonacci
public class FibonacciCalculateWorker : BackgroundService
{
private readonly ILogger<FibonacciCalculateWorker> _logger;
public FibonacciCalculateWorker(ILogger<FibonacciCalculateWorker> logger)
{
_logger = logger;
}
protected override async Task ExecuteAsync(CancellationToken stoppingToken)
{
stoppingToken.ThrowIfCancellationRequested();
await CreateFibonacciSeries();
}
public Task<string> CreateFibonacciSeries()
{
int a = 0, b = 1, c = 0;
StringBuilder fiboSeries = new StringBuilder();
fiboSeries.Append(a + "," + b);
for (int i = 2; i < 50; i++)
{
c = a + b;
fiboSeries.Append("," + c);
a = b;
b = c;
}
_logger.LogInformation(fiboSeries.ToString());
return Task.FromResult(fiboSeries.ToString());
}
}
公共类fibonacciculateworker:BackgroundService
{
专用只读ILogger\u记录器;
公共FibonacciuteWorker(ILogger记录器)
{
_记录器=记录器;
}
受保护的覆盖异步任务ExecuteAsync(CancellationToken stoppingToken)
{
stoppingToken.ThrowIfCancellationRequested();
等待CreateFibonacciSeries();
}
公共任务CreateFibonacciSeries()
{
int a=0,b=1,c=0;
StringBuilder fiboSeries=新的StringBuilder();
附加(a+“,”+b);
对于(int i=2;i<50;i++)
{
c=a+b;
附加(“,”+c);
a=b;
b=c;
}
_logger.LogInformation(fiboSeries.ToString());
返回Task.FromResult(fiboSeries.ToString());
}
}
和program.cs:
public static void Main(string[] args)
{
CreateHostBuilder(args).Build().Run();
}
public static IHostBuilder CreateHostBuilder(string[] args) =>
Host.CreateDefaultBuilder(args)
.UseWindowsService()
.ConfigureServices((hostContext, services) =>
{
services.AddHostedService<FibonacciCalculateWorker>();
});
publicstaticvoidmain(字符串[]args)
{
CreateHostBuilder(args.Build().Run();
}
公共静态IHostBuilder CreateHostBuilder(字符串[]args)=>
Host.CreateDefaultBuilder(args)
.UseWindowsService()
.ConfigureServices((主机上下文,服务)=>
{
services.AddHostedService();
});
如果您有任何建议,我们将不胜感激。如何阅读,从何处阅读?一个独立的进程除了标准输出之外没有任何可写入的内容,并且您无法读取Windows服务的输出。您需要某种形式的进程间通信(IPC),如设置web端点或(穷人的IPC)将内容写入文件。@Jeroenmoster感谢您的建议。您能否建议如何从worker设置web端点?有关如何将ASP.NET作为Windows服务宿主的一般信息,请参阅。工作者服务的代码可能需要一些更改才能响应请求,而不是自行计算。这不是
BackgroundService
s应该使用的方式。他们无法将数据返回给调用者,如果他们这样做了就没有意义了。如果调用方仍然依赖于计算结果,为什么调用方会将工作卸载到后台服务中?在这种情况下,调用方应该自己完成工作。当您的作业的生命周期与托管应用程序类似或按预定时间间隔运行时,请使用BackgroundService
s。