问一下简单的异步handler

a121984376 2013-05-13 01:11:01
有下面代码
  

public class Global : System.Web.HttpApplication
{

void Application_Start(object sender, EventArgs e)
{
ThreadPool.SetMinThreads(1, 200);
ThreadPool.SetMaxThreads(1, 200);
}
}
public class Handler1 : HttpTaskAsyncHandler, IHttpHandler
{


public override async Task ProcessRequestAsync(HttpContext context)
{
var info = context.Request.Params["value"];
var time = context.Request.Params["time"];
var rectime = DateTime.Now;
var result = await Task.Run(() =>
{
var obj = new asdas();
obj.Start = DateTime.Now;
var sadasd = new Executer();
sadasd.Execute();
obj.End = DateTime.Now;
return obj;
});
var s = "请求:" + info + "线程发起:" + time + "请求接收:" + rectime.ToLongTimeString() + "开始处理:" + result.Start.ToLongTimeString() + ",结束:" + result.End.ToLongTimeString(); ;

context.Response.Write(s);
}
}


public class asdas
{
public DateTime Start { get; set; }
public DateTime End { get; set; }
}

public class Executer
{
public void Execute()
{
//Thread.Sleep(3000);
var cnn = new SqlConnection("Data Source=10.32.11.23,14331;database=Service;uid=erpdev;pwd=erpdev@123");
var cmd = new SqlCommand("WAITFOR DELAY '00:00:03'", cnn);
cnn.Open();
cmd.ExecuteNonQuery();
cnn.Close();
}
}

以上是一个简单的异步handler,同时发情10个请求。

1,当Executer中的Execute方法只是Thread.Sleep(3000);的时候,这个异步与同步处理的请求接收时间和处理时间都是一样的。
2,当Executer中的Execute方法是数据库连接的时候,这个时候接收的请求会加快,大概比同步快着9-10秒钟。

难道CLR自己会判断,方法内部是一个IO(网络,文件,数据库)操作吗?然后从IO线程池中取出线程去执行?
...全文
95 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
a121984376 2013-05-30
  • 打赏
  • 举报
回复
没人解答~在自己顶一下
a121984376 2013-05-14
  • 打赏
  • 举报
回复
自己顶自己顶
a121984376 2013-05-13
  • 打赏
  • 举报
回复
引用 3 楼 moonwrite 的回复:
在我的知识结构中 貌似 即使是访问同一个Handler,每个请求都由一个线程处理的~ 所以~你多此一举了~ 而且看不到代码 你从线程池中拿出线程出来用啊~
那你可说错了,建议你研究一下HttpTaskAsyncHandler。 另外Task.Run 这个类是负责在从线程池中抽取线程执行任务
moonwrite 2013-05-13
  • 打赏
  • 举报
回复
在我的知识结构中 貌似 即使是访问同一个Handler,每个请求都由一个线程处理的~ 所以~你多此一举了~ 而且看不到代码 你从线程池中拿出线程出来用啊~
a121984376 2013-05-13
  • 打赏
  • 举报
回复
自己顶自己顶自己顶自己顶
a121984376 2013-05-13
  • 打赏
  • 举报
回复
自己顶。。为什嘛没人。。。

62,052

社区成员

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

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

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

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