我在SharePoint工作流程中遇到了一个奇怪的线程问题,我想了解更多信息。我正在尝试通过启动新线程来异步发送使用SPUtility.SendEmail的电子邮件。这在摘要电子邮件的工作流程结束时成功运行。我尝试过替换任务通知电子邮件,但最终收到以下错误:
Microsoft.SharePoint.SPException: 试图打电话超过 单线程模式下的一个线程。
我能想到的唯一区别是任务在复制活动中,因此它可以创建其中的几个任务(尽管测试它只会创建一个)。具体是在我尝试生成新线程时可能导致此错误的幕后复制活动?
[注] 我使用线程发送电子邮件的原因是因为SPUtility.SendEmail是一个阻塞调用,而在SMTP服务器速度慢的情况下,用户可能会将其页面恢复一分钟。我之所以发送电子邮件的原因是因为标准任务电子邮件吸引了大量时间。
答案 0 :(得分:4)
SPUtility.SendEmail使用非线程安全的SPWeb参数。 SPSite,SPWeb对象实际上是特定于线程的,因此您不应将它们从一个线程传递到另一个线程。您应该将站点ID和Web URL传递给新线程,并在那里重新创建SPWeb对象。