【发布时间】:2012-01-24 22:53:31
【问题描述】:
我想创建一个 WCF 服务,该服务将启动一个长时间运行的任务并可以查询线程的状态。
我的想法是创建一个实现这个接口的类
public interface IProcess
{
ProcessStatus GetStatus();
void AsyncStartDataProcess();
}
AsyncStartDataProcess 将创建一个新线程,该线程将为一些长时间运行的任务运行方法。
然后在 WCF 服务中有一个 IProcess 类型的静态对象:
public static IProcess ActiveProcess = ProcessFactory.CreateNewProcess();
然后通过ServiceContract暴露两个方法:
StatusResponse GetStatus();
StartProcessResponse StartProcess();
StartProcess 方法将调用 ActiveProcess.AsyncStartDataProcess() 和 GetStatus 将调用 ActiveProcess.GetStatus()。
每个请求只有一个活动进程。 GetStatus 和 StartProcess 将从 ASP.NET Web 应用程序访问,并且可以由多个用户访问。
在调用 WCF 服务期间我启动了一个长时间运行的线程是否会导致任何问题? (响应将到达客户端,线程将继续运行?)
在这种情况下我应该更好地使用单例实例吗?如果是,上一个问题是否适用于这种情况?
【问题讨论】:
-
如果你要使用单例,它会存在于哪个线程中?无论如何,您将不得不开始一个新线程。只需确保当 2 个用户同时调用 StartProcess() 时无法启动 2 个线程。
-
最初的想法是为长时间运行的任务创建一个新线程,无论服务类型如何。感谢您的输入,我在启动线程之前放了一个锁。我做了一些基本的测试,效果很好。
标签: .net wcf architecture