Table of Contents
C# Prism – BackgroundService 생성하기
놀랍게도 인공지능이 코딩한 코드입니다.
public interface IBackgroundService
{
Task StartAsync();
Task StopAsync();
}
public class BackgroundService : IBackgroundService
{
private readonly CancellationTokenSource _cts = new CancellationTokenSource();
private readonly IEventAggregator _eventAggregator;
public BackgroundService(IEventAggregator eventAggregator)
{
_eventAggregator = eventAggregator;
}
public async Task StartAsync()
{
await Task.Run(async () =>
{
try
{
while (!_cts.Token.IsCancellationRequested)
{
await DoWorkAsync();
// 필요한 경우 이벤트 발생
await _eventAggregator.PublishAsync(new WorkCompletedEvent());
await Task.Delay(1000, _cts.Token);
}
}
catch (OperationCanceledException)
{
// 정상적인 종료
}
}, _cts.Token);
}
public Task StopAsync()
{
_cts.Cancel();
return Task.CompletedTask;
}
private async Task DoWorkAsync()
{
// 실제 작업 수행
}
}
public partial class App : PrismApplication
{
private IBackgroundService _backgroundService;
protected override void OnInitialized()
{
base.OnInitialized();
// DI 컨테이너에서 서비스 가져오기
_backgroundService = Container.Resolve<IBackgroundService>();
// 서비스 시작
_backgroundService.StartAsync();
}
protected override void OnExit(ExitEventArgs e)
{
// 서비스 종료
_backgroundService?.StopAsync().Wait();
base.OnExit(e);
}
protected override void RegisterTypes(IContainerRegistry containerRegistry)
{
containerRegistry.RegisterSingleton<IBackgroundService, BackgroundService>();
}
}