2011-10-21 25 views
2

的任务,可能花费太长时间来完成,我想一个机制检查,如果一个线程是活着

  1. 启动任务
  2. 返回到用户界面(其网页)
  3. 定期/随机检查任务完成
  4. 取消正在执行的任务的时候用户希望这样
  5. 任务完成时得到通知/失败

什么是可能的解决方案?

  1. 主题? 启动一个线程,保存其ManagedThreadId,(你可以通过ID获得一个线程)

  2. 编写Windows 服务, 发送通过共享对象/文件/数据库来服务请求? 以同样的方式继续与服务交互(对象/文件/数据库等) 服务?

+1

您使用的是什么版本的.NET?听起来像.NET 4中的任务并行库将是理想的... –

+0

@JonSkeet在ASP.NET网页上的TPL?你确定? –

+0

@哈桑 - 啊,没有看到那一点。不在Web服务器本身,但很可能在服务*支持*用户界面。任务肯定还是相关的。 –

回答

1

在Windows服务中托管WCF服务,该服务将通过从可以使用MSMQ或数据库维护的队列中添加/读取来执行后台任务。

当您添加一个项目进行处理;你应该得到一个任务ID。您应该能够根据任务ID在db中记录任务的完成/失败/取消状态。

您可以在合同

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 
+0

看起来像一个很好的通用解决方案,可以与请求/响应消息系统配对,共享RequestId。 – hazimdikenli

相关问题