多线程和进程信令
Posted
技术标签:
【中文标题】多线程和进程信令【英文标题】:Multithreading and process signalling 【发布时间】:2012-01-30 10:28:51 【问题描述】:我有一个通过 Windows 服务 (vb.net) 执行的工作进程。它每 5 分钟执行一次并检查数据库中的“作业”表。我还有一个 Web 应用程序 (asp.net vb),它允许用户在出现错误时“暂停”当前正在运行的作业。
Web 应用程序向 Windows 服务发出停止处理信号的最佳方式是什么?它们在同一台机器上运行,但是如果您对它们是否在不同的机器上运行有建议,那就太好了。
我想避免在每次迭代期间调用数据库或文件系统来检查“状态”。
我有一个存储每个工作进程的自定义信息的数据库 - 如果可以通过 .Net 检索线程 ID 或进程 ID,我可以存储它以使 Web 应用程序能够向服务应用程序发送消息?
【问题讨论】:
【参考方案1】:您可能希望使您的服务成为 WCF 服务器。
然后,您可以从您的网络应用程序或任何方便的地方与它通信。您还可以提供进度/反馈 API 以及命令/控制 API - 这取决于您。
【讨论】:
【参考方案2】:.Net Framework 中有多种方法可以实现进程间通信。列举两个在框架中可用的:
.NET 远程处理 Windows 通信基础 (WCF)虽然第一个方法很简单但很老,但新的方法应该是 WCF。我建议您参考Beginner's Guide to Windows Communication Foundation 中的各种示例。
【讨论】:
【参考方案3】:您还可以使用依赖于系统信号量的named semaphore,允许您的进程实现生产者/消费者模式。
【讨论】:
以上是关于多线程和进程信令的主要内容,如果未能解决你的问题,请参考以下文章