黑马训练营-.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/

posted @ 2012-03-13 23:35  Yorkie  阅读(235)  评论(0编辑  收藏  举报