, Кроме того, если ваш код переносим, проверка того, что проблемы также возникают на компьютере с Windows, 1) полезна, чтобы увидеть, являются ли проблемы специфичными для платформы, и 2) если нет, у вас будет гораздо больше инструментов в вашем распоряжении. ,
могу создать несколько длинных фоновых потоков вSelf Hosted Self Contained ASP.NET Core Microservice
чей срок службы такой же, как срок службы микро-службы? Таким образом, информация, полученная из потоков, может быть отправлена в ответ на запросы.
Пробовал данный код, но он снижает производительность HTTP-запроса, когда фоновые потоки заняты. Основной метод файла Program.cs:
static void Main(string[] args)
{
//Start background thread1
//Start background thread2
//Around 10 background threads
//Start host
var host = new WebHostBuilder()
.UseKestrel()
.UseUrls(ServerUrl)
.UseConfiguration(config)
.UseContentRoot(Directory.GetCurrentDirectory())
.UseIISIntegration()
.ConfigureServices(s => s.AddRouting())
.Configure(app => app.UseRouter(r => { (new Router()).Route(r); }))
.Build();
host.Run();
}
Темы работают следующим образом:
Thread t1 = new Thread(StartWork);
t1.IsBackground = true;
t1.Start();
public void StartWork()
{
while (ApplicationIsRunning)
{
//Get database info >> login into remote devices (SSH) >> get information >> process information >> update application variables and database
Thread.Sleep(10000);
}
}
Загрузка ЦП составляет всего 1-5%, когда потоки заняты, но при этом производительность http-запросов очень низкая. После перехода в режим сна производительность снова улучшается.
Проблема заключается в методе подключения клиента SSH. В какой-то момент метод подключения не отвечает, и это также влияет на все остальные потоки. Это странно!
Renci.SshNet.SshClient sshClient = New Renci.SshNet.SshClient(sshConnectionInfo);
sshClient.Connect();
Если по какой-либо причине один поток занят соединением, это не должно влиять на другие потоки.