对于一项任务,可能需要很长时间才能完成,我想要一种机制
有哪些可能的解决方案?
线程吗 启动一个线程,保存它的ManagedThreadId,(你可以通过它的id得到一个线程)
写一个windows 服务, 通过共享对象/文件/ db将请求发送到服务? 继续以相同的方式与对象进行交互(对象/文件/数据库等) 服务?
答案 0 :(得分:1)
在Windows服务中托管WCF服务,该服务将通过添加/读取队列来执行后台任务,该队列可以使用MSMQ或在数据库中维护。
添加项目进行处理时;你应该得到一个任务ID。然后,您应该能够根据任务ID记录db中任务的完成/失败/取消状态。
您可以在WCF合同中使用以下方法
int ProcessItem(ItemDetails details); // returns task id
bool CancelTask(int taskID); // returns true if successfully cancelled; false otherwise
TaskStatus GetTaskStatus(int taskID); // returns Cancelled, Waiting, Failed or Completed
答案 1 :(得分:0)
您可以在单个过程中完成此操作 查看Task Paralell Library和/或TPL DataFlow
http://msdn.microsoft.com/en-us/library/dd460717.aspx http://go.microsoft.com/fwlink/?LinkId=205053