【发布时间】:2019-08-14 21:19:45
【问题描述】:
我们的网络服务器会即时生成文件以供下载。这需要大约两分钟的繁重处理,因为它需要 1000 个单词的模板,邮件合并它们,将它们转换为 pdf,然后从这 1000 个文件中压缩。该处理正在冻结网络服务器同时无法执行任何其他操作,这是一个问题,因为它为客户端托管了 23 个子域,并且他们注意到它冻结了。
如何强制 UI 线程完成一些工作?我一直在研究 Thread.Sleep 和 Thread.Yield 但也许我没有正确实现它们。我对线程的概念很陌生。
【问题讨论】:
-
使用Async方式处理繁重的工作负载
-
Thread.Sleep 将停止线程休眠。不好。
-
我建议改写这句话,这样更清楚,然后:
The processing is freezing the web browser from being able to do anything else -
那就不要你的网络服务器进程文件了。它不是为了这样做。它旨在处理 HTTP 请求。在可扩展的后台处理器应用程序(可能托管为 Windows 服务或 Azure 函数等)中完成这项工作。然后,您可以根据需要启动任意数量的服务器来执行工作,同时防止 Web 服务器过载。
-
梅森我会考虑你的建议。我对允许将这些东西带入杂草的范围有限制,而且我们没有任何天蓝色的东西,但可能我们可以将处理卸载到使用生成的控制台应用程序。
标签: c# multithreading