小编neo*_*r99的帖子

C#线程和队列

这不是关于我能够或应该以最佳方式利用队列的不同方法,而是我所看到的对我来说毫无意义的事情.

void Runner() {
    // member variable
    queue = Queue.Synchronized(new Queue());
    while (true) {
        if (0 < queue.Count) {
            queue.Dequeue();
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

这是在一个线程中运行的:

var t = new Thread(Runner);
t.IsBackground = true;
t.Start();
Run Code Online (Sandbox Code Playgroud)

其他事件是"排队"其他地方.我所见到的是在一段时间内,Dequeue实际上会抛出InvalidOperationException,队列为空.这应该是不可能看到计数如何保证那里有东西,我很肯定没有别的东西是"出列".

问题:

  1. Enqueue是否有可能在项目完全进入队列之前实际增加计数(无论这意味着什么......)?
  2. 线程是否有可能在Dequeue语句中以某种方式重新启动(到期,重置...),但是在它已经删除了一个项目之后立即?

编辑(澄清):

这些代码片段是实现后台帮助程序线程的Wrapper类的一部分.此处的Dequeue是唯一的Dequeue,并且所有Enqueue/Dequeue都在Synchronized成员变量(队列)上.

c# multithreading

11
推荐指数
1
解决办法
3万
查看次数

如果确定我们的系统需要大修,那么最好的方法是什么?

我们正在使用VBScript作为主要语言来构建基于Classic ASP的Web应用程序.我们同意我们的后端(框架,如果你愿意)已过时,并没有为我们提供快速前进的适当工具.我们几乎已经接受了当前的webMVC模式,并且不能以合理的方式使用当前的技术来实现.缺失的大功能是适当的调度和继承模板等.

目前正在讨论两条路径:

  1. 使用JScript将现有应用程序移植到Classic ASP,这将使我们能够毫不费力地从那里转到.NET MSJscript,并最终最终在.NET平台上(最好是MVC的东西将由ASP完成).在我们的意见中,NET并不比我们现在好多了.这被认为是比下一个选择风险更小的更安全的路径,尽管可能需要稍长一些.
  2. 使用其他一些技术完全重写应用程序,现在该软件包的领导者是Python WSGI,它具有自定义框架,ORM和良好的模板解决方案.即使是django和其他预先构建的解决方案,这里也有摆动空间.这种方法有望成为最快的解决方案,因为我们可能会在实际产品旁边运行测试版,但如果我们不能/不能做到这一点,它确实有可能浪费大量时间.

这并不意味着我们的逻辑已经消失,因为我们多年来建立的逻辑相当稳定,正如所指出的那样难以处理.它建立在SQL Server 2005上,大量使用存储过程并在IIS 6上发布,只是为了更多的背景.

现在,问题.有没有人采取上述两条路径中的任何一条?如果是这样,它是否成功,它怎么可能更好,等等.我们不希望偏离做这两件事之一,但一些建议或其他解决方案可能会有所帮助.

python vbscript asp-classic

3
推荐指数
1
解决办法
377
查看次数

标签 统计

asp-classic ×1

c# ×1

multithreading ×1

python ×1

vbscript ×1