Я использовал этот пример для создания временной фоновой задачи.Используя эту фоновую задачу, у меня есть значение, которое обновляется каждые x секунд, и это прекрасно работает.
Однако я хочу иметь возможность использовать это значение в моем конвейере промежуточного программного обеспечения.Как это достигается?Могу ли я использовать что-то вроде глобальной переменной или как-то ссылаться на HostedService?
Временная фоновая служба
Начато с использованием служб ConfigureServices .AddHostedService << >> ();
{
public class TimerService : IHostedService, IDisposable
{
private readonly ILogger _logger;
private Timer _timer;
public TimerService (ILogger<TimerService> logger)
{
_logger = logger;
}
public Task StartAsync(CancellationToken cancellationToken)
{
_logger.LogInformation("Timed Background Service is starting.");
_timer = new Timer(DoWork, null, TimeSpan.Zero,
TimeSpan.FromSeconds(1));
return Task.CompletedTask;
}
private async void DoWork(object state)
{
//Do your stuff here
await Task.Delay(50);
_logger.LogInformation("Timed Background Service is executing.");
}
public Task StopAsync(CancellationToken cancellationToken)
{
_logger.LogInformation("Timed Background Service is stopping.");
_timer?.Change(Timeout.Infinite, 0);
return Task.CompletedTask;
}
public void Dispose()
{
_timer?.Dispose();
}
}
}
Промежуточный конвейер
запущен с использованием Configure
public async Task Invoke(HttpContext context, ILogger<APIKeyHandler> logger, IConfiguration configuration)
{
_logger = logger;
bool KeyInHeader = context.Request.Headers.ContainsKey("Key");
if (KeyInHeader)
{
if (context.Request.Headers["Key"] = *!!VALUE COLLECTED USING THE TimerService*!!)
{
context.Response.StatusCode = (int)HttpStatusCode.NoContent;
await context.Response.WriteAsync($"Executed");
}
}
}
В настоящее время нет способа получить значения из TimerService.Я хотел бы иметь возможность ссылаться на Timerservice.LatestValue или что-то.Если это не путь, я хотел бы получить некоторые указания.