我一直在閱讀關於Threadpool.QueueUserWorkItem
(我一直在使用的),Task.Run
和Task.Factory.StartNew
,我仍然不清楚什麼是正確的選項。看來,因爲我的工作沒有CPU的約束,我可能不應該使用Task.Run
確定如何在網絡客戶端連接時正確排隊工作
我有我自己的線程運行等待連接:
Thread listenThread = new Thread(() => ListenForConnection());
listenThread.Name = "lThread";
listenThread.IsBackground = true;
listenThread.Start();
而且裏面,我簡單地做:
tlist = new TcpListener(IPAddress.Parse(ip.ToString()), 27275);
tlist.Start();
while (isRunning) {
try {
var client = await tlist.AcceptTcpClientAsync();
ThreadPool.QueueUserWorkItem(HandleClient, client);
}
catch (Exception) { }
}
HandleClient
解析客戶端發送的消息,並且創建一個簡單類的實例,或者在客戶端已經存在的情況下更新現有的實例,存儲對連接的引用並更新一些UI元素。
是ThreadPool.QueueUserWorkItem
這裏的首選方法還是我的方式?
編輯:只是要注意,在HandleClient
功能通常需要MS 5和30之間,所以不是很繁重的工作
線程和線程池有點舊了。現代的是Task.Fastory.StartNew和Task.Run。兩者都是具有更好功能的ThreadPool。 –