我不知道如果我做错了什么,我正在使用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