Files
xCommons/Providers/XResumableBackgroundService.cs

93 lines
2.1 KiB
C#

using System;
using System.Threading;
using System.Threading.Tasks;
using Microsoft.Extensions.Logging;
namespace xCommons.Providers
{
/// <summary>
/// Resumable Background Task ...
/// </summary>
public abstract class XResumableBackgroundService : XBackgroundService
{
/// <summary>
/// Check is Paused ...
/// </summary>
protected bool paused = false;
protected XResumableBackgroundService(
IServiceProvider serviceProvider,
ILogger<XResumableBackgroundService> logger
) : base(
logger: logger,
serviceProvider: serviceProvider
)
{ }
protected override async Task ExecuteAsync(
CancellationToken stoppingToken = default
)
{
//
if (paused)
{
return;
}
//
await DoWorkAsync(
payload: null,
cancellationToken: stoppingToken
);
}
/// <summary>
/// do all required works here ...
/// </summary>
/// <param name="payload"></param>
/// <param name="cancellationToken"></param>
/// <returns></returns>
public abstract Task DoWorkAsync(
object payload = null,
CancellationToken cancellationToken = default
);
/// <summary>
/// Pause Consuming ...
/// </summary>
/// <returns></returns>
public bool Pause()
{
//
var result = !paused;
if (!result)
{
return result;
}
//
paused = true;
result = paused;
return result;
}
/// <summary>
/// Resume Consuming ...
/// </summary>
/// <returns></returns>
public bool Resume()
{
//
var result = paused;
if (!result)
{
return result;
}
//
paused = false;
result = !paused;
return result;
}
}
}