Я написал код, используя TcpListener и асинхронное/Await, который будет ждать 3 клиента для подключения к серверу, добавьте их в список, а затем сделать что-то с клиентами:Является ли этот код async/awc Tcp считаться потокобезопасным?
private async void button1_Click(object sender, EventArgs e)
{
var listener = new TcpListener(IPAddress.Any, 6015);
listener.Start();
var clients = await Task.Run(() => GetTcpClients(listener));
// Do something with clients
listener.Stop();
}
private static async Task<List<TcpClient>> GetTcpClients(TcpListener listener)
{
var clients = new List<TcpClient>();
var clientsMaxReached = false;
while (!clientsMaxReached)
{
var client = await listener.AcceptTcpClientAsync();
clients.Add(client);
if (clients.Count == 3)
clientsMaxReached = true;
}
return clients;
}
Что я беспокою можно ли использовать список для клиентов вместо поточно-безопасной коллекции, так как ожидание может возобновиться в другом потоке. Кроме того, просто интересно, является ли использование TcpListener безопасным потоком.
Я не вижу проблемы, так как ни один из двух потоков никогда не будет иметь доступ к списку или TcpListener в одно и то же время, но просто думал, что я проверю.