Я унаследовал некоторые старые услуги Windows, которые были обновлены до .NET Core 8. Эти услуги будут лучше описаны как запланированные задачи. Они не вводят вклад, но убедитесь, что процесс работает в определенное время. Например, есть проверка, чтобы увидеть, были ли файлы, созданные процессом, отправлены в их пункт назначения. Это логическое значение, и единственное место, где его можно настроить, находится внутри процесса, который перемещает файлы. Я обнаружил, что в результате дополнительного регистрации это значение уже установлено на True, так как оно кэшируется от предыдущего запуска процесса. Это, в свою очередь, пропускает отправку файлов в пункт назначения, и все, к которому это ведет. В данный момент я прибегал к запланированной задаче для перезапуска службы один раз в день. Это избавилось от проблемы с кэшированием, но я пытаюсь понять, откуда это происходит в первую очередь. Информация, которую я имею в моих журналах, и журнал событий ничего не показывает мне, и я действительно не уверен, как выяснить, что здесь происходит. Ниже приведен метод задачи ExecuteAsync и содержимое программы .cs:
{executeAsync}
protected override async Task ExecuteAsync(CancellationToken stoppingToken)
{
int delay = 10;
try
{
if (this.configuration != null)
{
int counter = 1;
string workerName = $"WorkerProcess_{counter}";
Thread threadWorker = new Thread(() => this.DoWork(workerName, lockObj: lockOn))
{
IsBackground = false
};
threadWorker.Name = workerName;
threadList.Add(threadWorker);
if (this.configuration != null)
{
if (threadList != null)
{
try
{
threadList.ForEach(x => { x.Start(); });
do
{
counter = 0;
threadList.ForEach(x =>
{
if (x.ThreadState == ThreadState.Running)
{
x.Join();
counter++;
}
});
if (counter == 0)
{
threadList = new List();
}
} while (counter > 0);
}
catch (Exception e)
{
_logger.LogError($"{GetType().FullName}.ExecuteAsync() error occured {e.ToString()}");
}
}
}
}
if (stoptriggered == false)
{
await Task.Delay(delay, stoppingToken);
}
else
{
_workLauncher.OnStop();
_logger.LogInformation($"{GetType().FullName}.ExecuteAsync() - breaking indefinite While loop for service terminitation. ");
}
}
catch (TaskCanceledException tce) when (stoppingToken.IsCancellationRequested)
{
_logger.LogInformation(tce.Message);
}
catch (Exception ex) when (stoppingToken.IsCancellationRequested)
{
_logger.LogError(ex.Message);
}
catch (Exception ex) when (!stoppingToken.IsCancellationRequested)
{
_logger.LogError($"{GetType().FullName}.ExecuteAsync() error occured {ex?.ToString()}");
}
finally
{
}
}
IConfiguration configuration;
var environment = Environment.GetEnvironmentVariable("ASPNETCORE_ENVIRONMENT");
IHost host = Host.CreateDefaultBuilder(args)
.ConfigureAppConfiguration((context, config) =>
{
config.AddJsonFile("appsettings.json", optional: true, reloadOnChange: true)
.AddJsonFile($"appsettings.{environment}.json", optional: true, reloadOnChange: true)
.AddEnvironmentVariables();
configuration = config.Build();
})
.ConfigureServices(services =>
{
services.AddTransient();
})
.ConfigureLogging(logger => {
logger.AddConsole();
})
.UseWindowsService()
.Build();
await host.RunAsync();
Подробнее здесь: https://stackoverflow.com/questions/797 ... nd-service
Неожиданное кэширование в фоновой службе C# ⇐ C#
Место общения программистов C#
-
Anonymous
1755788738
Anonymous
Я унаследовал некоторые старые услуги Windows, которые были обновлены до .NET Core 8. Эти услуги будут лучше описаны как запланированные задачи. Они не вводят вклад, но убедитесь, что процесс работает в определенное время. Например, есть проверка, чтобы увидеть, были ли файлы, созданные процессом, отправлены в их пункт назначения. Это логическое значение, и единственное место, где его можно настроить, находится внутри процесса, который перемещает файлы. Я обнаружил, что в результате дополнительного регистрации это значение уже установлено на True, так как оно кэшируется от предыдущего запуска процесса. Это, в свою очередь, пропускает отправку файлов в пункт назначения, и все, к которому это ведет. В данный момент я прибегал к запланированной задаче для перезапуска службы один раз в день. Это избавилось от проблемы с кэшированием, но я пытаюсь понять, откуда это происходит в первую очередь. Информация, которую я имею в моих журналах, и журнал событий ничего не показывает мне, и я действительно не уверен, как выяснить, что здесь происходит. Ниже приведен метод задачи ExecuteAsync и содержимое программы .cs:
{executeAsync}
protected override async Task ExecuteAsync(CancellationToken stoppingToken)
{
int delay = 10;
try
{
if (this.configuration != null)
{
int counter = 1;
string workerName = $"WorkerProcess_{counter}";
Thread threadWorker = new Thread(() => this.DoWork(workerName, lockObj: lockOn))
{
IsBackground = false
};
threadWorker.Name = workerName;
threadList.Add(threadWorker);
if (this.configuration != null)
{
if (threadList != null)
{
try
{
threadList.ForEach(x => { x.Start(); });
do
{
counter = 0;
threadList.ForEach(x =>
{
if (x.ThreadState == ThreadState.Running)
{
x.Join();
counter++;
}
});
if (counter == 0)
{
threadList = new List();
}
} while (counter > 0);
}
catch (Exception e)
{
_logger.LogError($"{GetType().FullName}.ExecuteAsync() error occured {e.ToString()}");
}
}
}
}
if (stoptriggered == false)
{
await Task.Delay(delay, stoppingToken);
}
else
{
_workLauncher.OnStop();
_logger.LogInformation($"{GetType().FullName}.ExecuteAsync() - breaking indefinite While loop for service terminitation. ");
}
}
catch (TaskCanceledException tce) when (stoppingToken.IsCancellationRequested)
{
_logger.LogInformation(tce.Message);
}
catch (Exception ex) when (stoppingToken.IsCancellationRequested)
{
_logger.LogError(ex.Message);
}
catch (Exception ex) when (!stoppingToken.IsCancellationRequested)
{
_logger.LogError($"{GetType().FullName}.ExecuteAsync() error occured {ex?.ToString()}");
}
finally
{
}
}
IConfiguration configuration;
var environment = Environment.GetEnvironmentVariable("ASPNETCORE_ENVIRONMENT");
IHost host = Host.CreateDefaultBuilder(args)
.ConfigureAppConfiguration((context, config) =>
{
config.AddJsonFile("appsettings.json", optional: true, reloadOnChange: true)
.AddJsonFile($"appsettings.{environment}.json", optional: true, reloadOnChange: true)
.AddEnvironmentVariables();
configuration = config.Build();
})
.ConfigureServices(services =>
{
services.AddTransient();
})
.ConfigureLogging(logger => {
logger.AddConsole();
})
.UseWindowsService()
.Build();
await host.RunAsync();
Подробнее здесь: [url]https://stackoverflow.com/questions/79742452/unexpected-caching-in-c-sharp-background-service[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия