客户端应用程序在服务器上启动一个进程(通过 RIA,但实现并不重要)。当我说进程时,我指的是正在运行的业务代码,而不是指在 CPU 上运行的实际进程。
代码是 C#。
客户端然后检查以查看进程状态。失败,完成,仍在运行。
基础相对容易实现。我在服务器上静态存储了一个进程 ID,客户端可以在其中定期轮询服务器以检查进程,该进程将检查与进程 ID 关联的状态。
围绕这个的边缘情况需要更多的工作。异常中止线程(进程)而不允许代码处理异常并优雅地将与进程关联的状态设置为失败的致命和灾难性原因。在这种情况下,客户端将继续假设该过程仍在进行中。
我正在考虑在单独的线程中运行该进程并跟踪线程ID。当客户端调用服务器检查进程状态时,我们可以检查运行进程的线程的 IsAlive 属性。
我想知道是否有任何情况可能会出现问题?尽管线程已挂起,但 IsAlive 可能会返回 True 。
另一种方法是让服务器上的进程定期设置一个时间戳,当客户端检查状态时可以使用该时间戳。检查状态的代码可以查看时间戳的年龄,然后根据我们选择的任何时间间隔(比如说 2 分钟),它可以决定进程是否仍在运行(自上次写入时间戳以来还没有经过 2 分钟),或者进程无异常超时(自线程写入最后一个时间戳以来已超过 2 分钟)。所有时间戳都将在内存中完成。
是否有任何可能有益的最佳实践?有没有人对如何最好地解决这个问题有任何特别的见解或提示?我也对人们的其他场景或想法持开放态度?