我正在 .NET 中进行集成测试项目。测试框架可执行文件启动一个服务,然后需要等待该服务完成一个操作。
exe 等待服务完成其任务的最佳方法是什么(任务完成后服务本身不会退出)?
两个进程都可以访问同一个数据库,所以我首先想到的是一个记录服务状态的简单表。一旦发出完成的信号,exe 就可以停止等待并完成其任务。其他方法?
让我重申一下,服务一旦完成其任务,将保持在运行/内存中状态,因此等待它退出是行不通的。 ;-)
此外,这纯粹是为了集成测试目的,永远不会投入生产,所以“简单”是操作词。
最佳答案
您可以在命令行上(或通过某种其他机制,如硬编码)将 Semaphore
名称传递给服务,然后通过在您的 exe 中调用 Release()
等待服务对其进行 WaitOne()
。
应用代码:
Semaphore s = new Semaphore(1, 1, "MyNamedSemaphore");
// start service, passing the string "MyNamedSemaphore"
s.WaitOne(); // will wait for Release() in service
服务代码:
// perform the initial task
// find semaphore name (i.e. from Environment.CommandLine)
Semaphore s = new Semaphore(1, 1, semaphoreName); // will use existing kernel object
s.Release(); // WaitOne in exe will complete
关于.net - 如何在 .NET 中等待另一个进程的状态?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/166844/