-2
我寫了使用的TcpListener和一些代碼異步/等候一項將等待3個客戶端連接到服務器,將它們添加到列表,然後做一些與客戶:這個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;
}
我所關心的是是否可以爲客戶端使用List而不是線程安全的集合,因爲await可能會在其他線程上恢復。此外,只是想知道我的TcpListener用法是否也是線程安全的。
我沒有看到問題,因爲沒有兩個線程同時訪問列表或TcpListener,但只是想我會檢查。