我的任务并不重要;如果使用网站,它应该运行一次。
所以我尝试了这种方法:http://blog.stackoverflow.com/2008/07/easy-background-tasks-in-aspnet/
任务可能很长,所以我希望它是异步的......这样后台任务就不会停止导航。
我不明白的是,当我开始调试(附加到进程w3wp.exe)时,我不再在网站上导航,直到我停止调试?
以下是代码(ResourceService是在同一项目中的ISS上托管的WCF服务):
private void CacheItemRemoved(string taskName, object seconds, CacheItemRemovedReason r)
{
switch (taskName)
{
case MedianamikTasks.UpdateResources:
if (Config.EnableAutoResourceUpdate)
{
ThreadStart threadStart = ResourceService.UpdateResources;
var thread = new Thread(threadStart) {IsBackground = true};
thread.Start();
//Do not use... : http://csharpfeeds.com/post/5415/Dont_use_the_ThreadPool_in_ASP.NET.aspx
//ThreadPool.QueueUserWorkItem(x => ResourceService.UpdateResources());
}
break;
}
AddTask(taskName, Convert.ToInt32(seconds));
}
答案 0 :(得分:2)
我不明白的是 当我开始调试(附加到 进程w3wp.exe)我无法导航 该网站,直到我停止 调试?
只是一个猜测,但你有断点设置吗?一旦你遇到断点,w3wp进程中的执行就会在那时停止,因此你将无法在网站周围“导航”。
答案 1 :(得分:1)
使用后台工作人员。
BackgroundWorker worker;
worker = new BackgroundWorker();
worker.DoWork += new DoWorkEventHandler(worker_DoWork);
worker.RunWorkerCompleted += new RunWorkerCompletedEventHandler(worker_RunWorkerCompleted);
worker.RunWorkerAsync();
然后在DoWork处理程序中调用您需要的方法