asp.net中的task不执行

mirrorspace 2018-07-01 05:34:49
在asp.net中 IIS10

...
// 清除历史 --- 这个地方没有执行,为什么
clearTask();


response.end();

// clear
private static void clearTask()
{
void del_History()
{
......
LoggerHelp.Log("清除历史记录完成");
}
Task delHistory = Task.Factory.StartNew(del_History);
}
...全文
614 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
sdfgrtyu 2018-07-06
  • 打赏
  • 举报
回复
你这贴的代码不全啊,没有办法分析,,,,,
sdfgrtyu 2018-07-06
  • 打赏
  • 举报
回复
有可能是你的IIS线程结束之后,Task线程是不是关了
mirrorspace 2018-07-06
  • 打赏
  • 举报
回复
但结果没有产生这个文件.
看来真的是没有执行.....
mirrorspace 2018-07-06
  • 打赏
  • 举报
回复
按昭7,8楼的方法,我做了一个试验,如果执行了,会生产一个文件
public void ProcessRequest(HttpContext context)
{
.......
//
Task a = Task.Factory.StartNew(() =>
{
System.Threading.Thread.Sleep(5000);
using (System.IO.StreamWriter sw=new System.IO.StreamWriter("d:/waitclearlog.txt"))
{
sw.Write("5秒后执行写入到文件");
}
});
// 返回请求
this.Json(new { errcode = 200, errmsg=""});
}
mirrorspace 2018-07-06
  • 打赏
  • 举报
回复
当然,编译通过了,也执行了

这说明 放在task里和放在线程池里,处理的机制不一样.

ThreadPool.QueueUserWorkItem((o) =>
{
System.Threading.Thread.Sleep(5000);
using (System.IO.StreamWriter sw=new System.IO.StreamWriter("d:/waitclearlog.txt"))
{
sw.Write("5秒后执行写入到文件");
}
})
sdfgrtyu 2018-07-06
  • 打赏
  • 举报
回复
引用 14 楼 mirror030 的回复:
你说的对.我试验了一下
ThreadPool.QueueUserWorkItem(() =>
{
System.Threading.Thread.Sleep(5000);
using (System.IO.StreamWriter sw=new System.IO.StreamWriter("d:/waitclearlog.txt"))
{
sw.Write("5秒后执行写入到文件");
}
})
这种可以执行了.....
页面上收到返回值以后,,过了几秒种 ,文件创建了

但是..这是为什么呢 WHY

[quote=引用 13 楼 u010941149 的回复:]
你这种是不是应该写 ThreadPool.QueueUserWorkItem();
完全没有必要写Task.Factory.StartNew
又发现一个bug,,,,,,,,,,,,,,,,,,,
[/quote]
不会吧?
都是一样的啊,就是你这段代码能通过编译吗?

mirrorspace 2018-07-06
  • 打赏
  • 举报
回复
你说的对.我试验了一下
ThreadPool.QueueUserWorkItem(() =>
{
System.Threading.Thread.Sleep(5000);
using (System.IO.StreamWriter sw=new System.IO.StreamWriter("d:/waitclearlog.txt"))
{
sw.Write("5秒后执行写入到文件");
}
})
这种可以执行了.....
页面上收到返回值以后,,过了几秒种 ,文件创建了

但是..这是为什么呢 WHY

引用 13 楼 u010941149 的回复:
你这种是不是应该写 ThreadPool.QueueUserWorkItem();
完全没有必要写Task.Factory.StartNew
又发现一个bug,,,,,,,,,,,,,,,,,,,
sdfgrtyu 2018-07-06
  • 打赏
  • 举报
回复
你这种是不是应该写 ThreadPool.QueueUserWorkItem();
完全没有必要写Task.Factory.StartNew
又发现一个bug,,,,,,,,,,,,,,,,,,,
  • 打赏
  • 举报
回复
用了C#7的内部方法……
你这样估计出了方法后就出了内部作用域了吧
你还是改成下面的写法试试
Task.Factory.StartNew(()=>{
//......
LoggerHelp.Log("清除历史记录完成");
});
Vito1993 2018-07-05
  • 打赏
  • 举报
回复
更正
void a(){
task t = new task(() => {
//TODO
});
t.start();
}
Vito1993 2018-07-05
  • 打赏
  • 举报
回复
好像应该这样写。。

void a(){
task t = new task(() => {
//TODO
}
t.start();
}
mirrorspace 2018-07-05
  • 打赏
  • 举报
回复
是一个IHttpHandler里面的

当前的环境 是处理一个请求,

在处理请求之后,删除与该请求相关的缓存数据,这个过程可能时间有点长,

所以想先返回给浏览器端,然后再慢慢清除缓存

结果没想到,已经返回客户端了,但是 delHistory却没机会执行了.

好像是负责这个请求的IIS线程结束之后,在其中打开的这个task也就没机会执行了
正怒月神 版主 2018-07-03
  • 打赏
  • 举报
回复
你把这一块代码完整发上来看看。
private static void clearTask()
{
void del_History()
{
......
LoggerHelp.Log("清除历史记录完成");
}
Task delHistory = Task.Factory.StartNew(del_History);
}
这个代码。你的void是不是放错地方了?
如果按我理解,del_History在外面,那么应该没问题。
smileruner 2018-07-03
  • 打赏
  • 举报
回复
StartNew参数里面应该是Task对象,不应该直接是一个方法吧。
mirrorspace 2018-07-01
  • 打赏
  • 举报
回复
Task.Factory.StartNew(del_History);
这个就是start的了.我改成这样,还是不执行
引用 1 楼 guwei4037 的回复:
delHistory.Start();

全栈极简 2018-07-01
  • 打赏
  • 举报
回复
delHistory.Start();

62,046

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧