0

我正在阅读关于某个名为 stackoverflow 的页面的徽章系统的博客Easy Background Tasks:P,因此,在评论中说他们以执行任务的服务结束,但例如:

用户在 T1 时间执行操作 此操作取决于 X 个用户 在 T2 时间之后,您需要执行一些数据库查询并通知用户(电子邮件或其他)

我这样说是因为实时体验,所以这里的问题是,如果你使用线程,假设你有 1000 个执行操作的用户,你将有 1000 个等待线程,所以在一段时间内,会出现 reciclyng,或者如果服务器由于某种原因关闭,您将丢失所有这些任务。使用计时器将在相同的情况下结束

如果您使用服务,您将失去实时体验,例如在线游戏中。

那么,如何处理这种东西呢?

4

1 回答 1

3

使用线程和信号时应该小心。解决方案取决于场景的细节,但可扩展的解决方案之一是轮询

根据您的情况,线程之间的信号传输效率不高,因为线程池中的可用线程数量总是有限的。但是,如果您知道将持有线程的最大用户数(取决于游戏设计),您可以使用使用 WaitHandles(AutoResetEvent 和/或 ManualResetEvent)的信号在线程之间发出信号。但请确保您在 Global.asax 的 Application_Start 事件处理程序中增加了池中的可用线程数

            int availableThreads;

            int availablePorts;

            ThreadPool.GetAvailableThreads(out availableThreads, out availablePorts);

            ThreadPool.SetMinThreads(availableThreads, availablePorts);

希望能帮助到你。

于 2012-09-23T11:45:55.467 回答