我在我的 MVC3 应用程序中使用 Rotativa 将 pdf 生成到内存流中,然后作为电子邮件附件通过电子邮件发送出去。这工作正常,但速度很慢(只有 1 个用户约 5-7 秒)所以我一直在尝试将它放入一个单独的线程中,这样用户就不会陷入巨大的延迟。
我一直面临的问题是 Rotativa 需要控制器上下文将数据生成到内存流中,这意味着如果您尝试将其放在单独的线程中并向用户返回通知,那么上下文将被释放并且pdf生成将失败。
不幸的是,我在服务器端进行了电子邮件验证检查,并在适当的情况下返回真/假,假将提示用户修复并重试。这意味着我不能仅仅假设电子邮件始终有效(我可以通过 jquery 来完成,但如果他们将其关闭并尝试提交,他们将不会收到错误消息)。
到目前为止,我已经尝试过:
- 创建一个新线程并传入上下文
- 通过将上下文复制到新变量来复制上下文
- 序列化上下文,将流传递给新线程并反序列化(不幸的是上下文不可序列化)
有没有人有任何其他想法?