2022-02-11 15:42:50 +00:00
|
|
|
|
namespace ASC.Feed.Aggregator.Service;
|
|
|
|
|
|
|
|
|
|
public abstract class FeedBaseService : IHostedService, IDisposable
|
2022-02-11 11:39:42 +00:00
|
|
|
|
{
|
2022-02-11 15:42:50 +00:00
|
|
|
|
protected virtual string LoggerName { get; set; } = "ASC.Feed";
|
|
|
|
|
|
|
|
|
|
protected Timer Timer;
|
|
|
|
|
protected volatile bool IsStopped;
|
|
|
|
|
protected readonly ILog Logger;
|
|
|
|
|
protected readonly FeedSettings FeedSettings;
|
|
|
|
|
protected readonly IServiceProvider ServiceProvider;
|
|
|
|
|
protected readonly object LockObj = new object();
|
|
|
|
|
|
|
|
|
|
public FeedBaseService(
|
|
|
|
|
FeedSettings feedSettings,
|
|
|
|
|
IServiceProvider serviceProvider,
|
|
|
|
|
IOptionsMonitor<ILog> optionsMonitor)
|
2022-02-11 11:39:42 +00:00
|
|
|
|
{
|
2022-02-11 15:42:50 +00:00
|
|
|
|
FeedSettings = feedSettings;
|
|
|
|
|
ServiceProvider = serviceProvider;
|
|
|
|
|
Logger = optionsMonitor.Get(LoggerName);
|
|
|
|
|
}
|
2022-02-11 11:39:42 +00:00
|
|
|
|
|
2022-02-11 15:42:50 +00:00
|
|
|
|
public abstract Task StartAsync(CancellationToken cancellationToken);
|
2022-02-11 11:39:42 +00:00
|
|
|
|
|
2022-02-11 15:42:50 +00:00
|
|
|
|
public abstract Task StopAsync(CancellationToken cancellationToken);
|
2022-02-11 11:39:42 +00:00
|
|
|
|
|
2022-02-11 15:42:50 +00:00
|
|
|
|
public void Dispose()
|
|
|
|
|
{
|
|
|
|
|
if (Timer == null)
|
2022-02-11 11:39:42 +00:00
|
|
|
|
{
|
2022-02-11 15:42:50 +00:00
|
|
|
|
return;
|
|
|
|
|
}
|
2022-02-11 11:39:42 +00:00
|
|
|
|
|
2022-02-11 15:42:50 +00:00
|
|
|
|
var handle = new AutoResetEvent(false);
|
2022-02-11 11:39:42 +00:00
|
|
|
|
|
2022-02-11 15:42:50 +00:00
|
|
|
|
if (!Timer.Dispose(handle))
|
|
|
|
|
{
|
|
|
|
|
throw new Exception("Timer already disposed");
|
2022-02-11 11:39:42 +00:00
|
|
|
|
}
|
2022-02-11 15:42:50 +00:00
|
|
|
|
|
|
|
|
|
handle.WaitOne();
|
2022-02-11 11:39:42 +00:00
|
|
|
|
}
|
|
|
|
|
}
|