В настоящее время у меня есть приложение C#, работающее как windows. Приложение запускает TCPListener, затем через некоторое время l oop захватывает клиентов и сразу же выбрасывает их в ThreadPool.UnsafeQueueUserWorkItem для выполнения всей реальной работы. Клиент закрывается в конце вызова UnsageQueueUserWorkItem. Базовый c код приведен ниже:
var server = new TcpListener(ip, port);
server.Start();
while (true)
{
try
{
TcpClient client = await server.AcceptTcpClientAsync();
var cw = new TcpClientService(logger, client, parser, dataRepo, propertyRecordDefinitions,
vimAlertsSent, reservations, emailClient);
ThreadPool.UnsafeQueueUserWorkItem(x => ((TcpClientService)x).Run(), cw);
}
catch(Exception iex)
{
//DO SOME LOGGING
}
finally
{
}
}
Все это работает как windows служба на ВМ в AWS. Мне интересно, если это хороший кандидат для Google Cloud Run (или любой другой функции без сервера / без сохранения состояния). Я получаю сотни запросов (клиентов) в минуту и надеюсь увеличить их до тысяч. Насколько я понимаю, Cloud Run потенциально может быть вызван входящим запросом, тогда я мог бы просто запустить свой код TcpClientService, который в данный момент вызывается Threadpool.UnsafeQueueUserWorkItem. Это хорошая реализация? Для этого ли оптимизирован Google Cloud Run? Мне интересно, если я увижу некоторую деградацию в том, что соединения с БД могут не объединяться в пул, и некоторые другие структуры, которые я разделяю между потоками (все мои входные данные для вызова TcpClientService) должны будут обновляться при каждом вызове функции. Мысли? * * 1004