티스토리 뷰

services.AddHostedService<FileWatcherService>();
protected override async Task ExecuteAsync(CancellationToken stoppingToken)
{
    await Task.Delay(TimeSpan.FromSeconds(3));

    // 감시할 폴더
    var path = Path.Combine(Directory.GetCurrentDirectory(), "files");
    if (Directory.Exists(path) == false)
    {
        Directory.CreateDirectory(path);
    }

    await CheckFilesAsync(path);

    var watcher = new FileSystemWatcher(path)
    {
        IncludeSubdirectories = true
    };
    watcher.Created += OnCreated;
    watcher.EnableRaisingEvents = true;

    while (stoppingToken.IsCancellationRequested == false)
    {
        if (filesQueue.Count > 0)
        {
            var filePath = filesQueue.Dequeue();
            await CheckAsync(filePath);
        }
        await Task.Delay(TimeSpan.FromSeconds(1));
    }
}

- 위와 같이 FileWatcher를 등록하여 사용하는데 동작하다 중간 중간 멈추는 현상 발생

- IIS가 유휴상태로 돌입하였을 시 백그라운드에 등록된 작업을 while하지 않음

- 아무 REST API로 IIS가 동작되었을 시 유휴상태가 해제되어 백그라운드 작업또한 while을 재진행.

- 보통 백그라운드 작업을 등록하지 않는 것이 일반적이라고 하나 필요 시 참고하여 개발해야함

댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크