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.


Ответы (0 шт):