【发布时间】:2021-06-24 15:49:45
【问题描述】:
我正在尝试通过 BackgroundService 从 Angular 轮询到 .NET Core API。
我将从调用 ApiController 的 Angular 组件传递输入,这将触发 BackgroundService,并且输出会频繁更新回 Angular 组件。
我有几个问题。
- 我可以在没有任何外部库的情况下通过这种方式实现轮询吗?
- 如何将参数传递给Worker
ExecuteAsync? - 如何通过GET API调用BackgroundService?
ApiController
[ApiController]
[Route("[controller]")]
public class TestController : ControllerBase
{
private readonly ILogger<TestController> _logger;
public TestController(ILogger<TestController> logger)
{
_logger = logger;
}
[HttpGet]
public async Task<JsonResult> Get(CancellationToken cancellationToken)
{
var output = await Worker //How to call the worker here and then return the output?
return new JsonResult(output);
}
}
工人
public class Worker : BackgroundService
{
private readonly ILogger<Worker> _logger;
public Worker(ILogger<Worker> logger)
{
_logger = logger;
}
protected override async Task ExecuteAsync(CancellationToken stoppingToken)
{
while (!stoppingToken.IsCancellationRequested)
{
_logger.LogInformation("Worker running at: {time}", DateTimeOffset.Now);
await Task.Delay(1000, stoppingToken);
// Process inputs and return outputs in frequent intervals
}
}
}
角度组件
import { Component, Inject } from '@angular/core';
import { FormBuilder, FormGroup, FormControl, Validators } from '@angular/forms';
import { HttpClient } from '@angular/common/http';
import { Observable } from 'rxjs';
@Component({
selector: 'app-home',
templateUrl: './home.component.html',
})
export class HomeComponent {
public testForm: FormGroup;
public test = new FormControl('1');
constructor(private fb: FormBuilder,
http: HttpClient, @Inject('BASE_URL') baseUrl: string) {
const result = interval(2000)
.pipe(
switchMap(() => http.get(baseUrl + 'test')),
map(res => res))
result.subscribe(res => {
this.x.setValue(res);
})
}
}
【问题讨论】:
标签: angular asp.net-core-webapi backgroundworker .net-core-angular