我不知道如果我做錯了什麼,我正在使用SmartThreadPool來管理我的線程。在這種特殊情況下,我調用SmartThreadPool的一個實例,然後獲取worker項的結果(方法發送電子郵件)。 '字符串結果'接收方法的輸出。如果確定,則顯示OK,否則顯示異常。ThreadPool C#,工作人員項目的結果太慢,爲什麼?
SmartThreadPool smartThreadPool = new SmartThreadPool();
String result = (String)smartThreadPool.QueueWorkItem(x => emailHelper.sendEmail(whichMail.Text, emailTo.Text, subject.Text, bodyMsg.Text)).Result;
if (result != "True")
helper.showMessageBox(Properties.Resources.emailNotSent + result, "x");
else
aux.setRadDesktop(Properties.Resources.emailSent, "", false);
問題是當我鑄造結果爲String實在是太慢了,甚至我的UI被暫停像2秒,我不知道爲什麼。如果我忽略這樣的工人項目結果:
smartThreadPool.QueueWorkItem(x => emailHelper.sendEmail(whichMail.Text, emailTo.Text, subject.Text, bodyMsg.Text));
一切工作正常,任何線索?
你的智能線程池並不那麼聰明。它允許您等待TP結果。這不完全是一個很好的功能,發送電子郵件可能需要幾秒鐘的時間。在線程上運行它沒有任何意義,不妨直接調用該方法。你永遠不會使用.NET ThreadPool.QueueUserWorkItem()方法犯這個錯誤。扔掉SmartThreadPool類,它會讓你陷入困境。 –
@HansPassant這同樣適用於'Task'嗎? – svick
@HansPassant:我同意你的評論一般;但爲了公平對待OP,TPL'任務'類具有類似的'Result'屬性,如果從UI線程訪問,則會產生完全相同的行爲。 –
Douglas