У меня есть фоновая служба в. NET ( BackgroundService )
public class MyService<TElement, TKey, TValue> : BackgroundService
Он работает в Startup, и я настроил его следующим образом:
_serviceCollection.AddHostedService<MyService<TElement, TKey, TValue>>();
_serviceCollection
- это IServiceCollection instance.
Это прекрасно и отлично работает.
Я разрабатываю тест и хочу создать экземпляры MyService
Background Сервис динамически основан на вызовах веб-API. Я уже создаю их в памяти при вызове веб-API.
У меня есть три вызова: Create, Start и Stop. Один будет создавать фоновую службу в памяти, а другой запускать и останавливать соответственно.
У меня есть этот вызов для запуска фоновой службы.
[HttpPost("myservice/perf/start")]
public async Task<IActionResult> StartServiceAsync(CancellationToken cancellationToken, [FromBody] ServiceParameters params)
{
await Task.Run( () => {
// Start the consumer service if not already started
// retrieve service instance
var _myServiceInstance = GetMyService( params );
_myServiceInstance .StartAsync(new CancellationToken());
});
}
Я не уверен, что он работает. Несмотря на то, что я вижу точку останова в методе ExecuteAsync
, принадлежащем моей фоновой службе, я не могу выполнить построчно, она просто исчезает. Я не уверен, правильно ли я запускаю его или он отменяется при закрытии HTTP-запроса (поэтому я использую новый токен CancellationToken вместо того, чтобы передавать его из вызова POST контроллера).
Я хочу запустить фоновая служба асинхронно. У меня также есть еще один вызов контроллера, чтобы остановить MyService (он вызовет вызов StopAsyn c)
Я что-то делаю не так?