如果您是在UI線程調用SendMessage()
那麼它會阻止它和你的應用程序將「凍結」。相反,你要發送的數據,在.NET 4.0中
如果您的應用程序服務客戶端使用ThreadPool.QueueUserItem(o => SendMessage())
或Task.Factory.StartNew(() => SendMessage())
從Task Parallel Library和您爲每個客戶端的新線程每次創建一個新的線程,然後SendMessage()
可以,如果你阻止在將數據發送到客戶端時不想做其他工作。
創建爲每一個客戶一個新的線程有一個缺點:大量的線程會消耗大量的資源和最,而他們可能會在此期間被服務的其他客戶,這些線程將被閒置的時間。如果你想創建一個高性能的服務器應用程序,你應該學習異步編程。
結賬Async CTP。它可以讓你寫異步代碼,看起來像同步的代碼,而不凌亂回調
public async void SendMessage()
{
try {
await socket.WriteAsync(buffer, 0, buffer.Length);
} catch (...) {
// handle it
}
}
現在的SendMessage()不會阻止,因爲它會被異步執行,它看起來並不嚇人了!
來源
2011-04-28 06:57:17
mak
我真的只會學習使用該方法的異步版本。如果您需要做異步Web請求,它將在以後幫助您,因爲模型是相同的。另外如果你想轉移到Silverlight開發,他們只提供一些功能的異步方法。 – RedDeckWins 2011-04-28 06:50:34