黑马训练营-.Net异步编程专题之我见
---------------------- Windows Phone 7手机开发、.Net培训、期待与您交流! ----------------------
其实这篇文章还谈不上纯粹的异步编程的介绍,仅仅是几个简单多线程例子在Web开发中的用途以及个人对何时运用异步技术的一些观点。
首先,本文所用的异步技术相当原始,即ThreadPool类的QueueUserWorkItem()方法来实现的!
实现代码如下:
Button2.Click += delegate(System.Object __o, System.EventArgs __e)
{
ThreadPool.QueueUserWorkItem((state) => { Save(); });
};
下面是save方法,为测试方法,修改服务器端的一个xml文件(其实是插入操作)
1 private void Save()
2 {
3 XmlDocument xmldoc = new XmlDocument();
4 xmldoc.Load(Server.MapPath(@"~/Models/some.xml"));
5
6 XmlNode Xn = xmldoc.SelectSingleNode("root/some");
7 Xn.Attributes[0].Value = "some-value";
8
9
10 for (int i = 0; i < 2211300; i++)
11 {
12 XmlElement ele = xmldoc.CreateElement("some_new");
13 ele.SetAttribute("count", i.ToString());
14 Xn.AppendChild(ele);
15 }
16 xmldoc.Save(Server.MapPath(@"~/Models/some.xml"));
17 }
下面再写一个单线程按钮事件:
1 Button1.Click += delegate(System.Object o, System.EventArgs _e)
2 {
3 Save();
4 };
好了,点击Button1将是单线程,Button2为多线程
好戏开始了!
点击Button1之后,经过长时间的请求,xml文件被修改了,但是耗时为3s左右
点击Button2之后呢?请求时间不到0.01s页面就被返回了,查看xml文件,同样也被修改了。
-------------------------------------------------------------------------------------
以上就是一个快速响应的例子……
下面是关于异步操作的适用性:
对于后台操作,无疑是异步编程的舞台。
什么是后台操作?
比如对一些IO,磁盘等的文件的操作,不需要伴随着此次响应发送给Response端响应的!
还有一种技术叫ajax哦!
对,如果我需要将修改的内容呈现在我的页面,怎么办?
第一步的操作仍然没有变化,调用一个后台线程去执行这个IO。。。(其他)操作;
下面,我们通过xhr来异步请求相关的内容作为返回值,这是我想到的一种好的解决方案!
但是,有个警告:
线程中不能直接操作UI线程中的内容!
---------------------- Windows Phone 7手机开发、.Net培训、期待与您交流! ----------------------
详细请查看:http://net.itheima.com/