C# Синхронизация в многопоточном TCPListener
Имеется TCP-сервер с базой данных, к которому подключаются клиенты (0-100 одновременно). Предполагается, что каждый клиент "висит" подключенный на время сессии и делает периодические запросы к базе. Соответственно, я реализовал стандартный асинхронный TCP-Listener из примеров из интернета. Грубый псевдокод:
server.start() // Запускается из UI
{
Task tcpWorkTask = Task.Run(() => TCP_WORK());
}
private void TCP_WORK()
{
tcpListener.Start();
while (true)
{
var tcpClient = tcpListener.AcceptTcpClient();
Task tsk = Task.Run(() => ProcessClient(tcpClient));
}
}
private void ProcessClient(TcpClient client)
{
NetworkStream stream = client.GetStream();
StreamReader reader = new StreamReader(stream);
StreamWriter writer = new StreamWriter(stream);
string Message = string.Empty;
while (true)
{
try
{
Message = reader.ReadLine();
}
catch
{
break;
}
if(Message == "1")
database.read(out Message);
else if(Message == "2")
{
database.write(Message);
Message = "OK";
}
try
{
writer.WriteLine(Message);
}
catch
{
break;
}
}
if (reader != null)
reader.Close();
if (writer != null)
writer.Close();
if (stream != null)
stream.Close();
if (client != null)
client.Close();
}
Я новичок в C# и тем более в асинхронном программировании. Вопрос: требуется ли какая-либо синхронизация в методе ProcessClient? Могут ли возникнуть ошибки, если одновременно придёт несколько запросов от разных клиентов? Или каждый таск будет работать со ссылками на свои объекты и всё будет хорошо? P.S. В методах работы с базой естественно использую lock.