第四十一讲 ASP.NET消息处理(二)

* 摘要
。MSMQ简介
。消息队列属性
。异步消息处理
。多线程和MSMQ
。利用MSMQ发送数据集
。利用MSMQ发送文件

* 消息队列属性
。Path属性:它可以决定引用队列的三种方式,路径引用,格式名引用,标识引用
。Category属性:标识当前使用的队列的类型。Category是队列所有者定义的GUID值。该GUID值可以有GUID生成工具产生或者是用户自定义的数字值
。Formatter属性:决定在一个队列中如何发送和接收消息的顺序,以及可以在一个消息中发送什么样的内容。
。DenyShareReceive属性:决定同一时间内只有一个部件能够访问消息队列中的消息。
。CanRead和CanWrite属性:决定队列是否可以被读取或者是写入
。MaximumQueueSize和MaxmumJournalSize属性:以千字节为单位设置一个队列(日志队列)的消息最大容纳量。一旦接收的消息到达这个容量,新的消息将不再被接收。
。MessageReadPropertyFilter属性:获取或设置接收或查看消息的属性筛选器。


* 异步消息处理
。如果想检索消息但不阻碍应用程序的处理,可异步检索消息。在异步消息处理中,启动任务的方法被立即返回而不等待结果。
。异步接收消息时,使用BeginReceive方法和EndReceive方法标记操作的开始和结束。
。异步查看消息:Peek使用两个名为BeginPeek和EndPeek的方法括起异步操作的开始和结束。
。异步接收和查看操作均可使用超时时限来指定等待多长时间使消息变得可用。要完成此操作,可以使用任意一种方法的重载窗体来传递表示等待时

间的TimeSpan对象

* 多线程和MSMQ
。单线程:仅包含与应用程序进程对应的线程。进程可以被定义为应用程序的实例,拥有该应用程序的内存空间。大多数Windows应用程序都是单线程的,即用一个线程完成所有工作。
。单元线程:是一种稍微复杂的线程模式。标记用于单元线程的代码可以在其自己的线程中执行,并限制在自己的单元中。在单元线程模式中,所有线程都在主应用程序内存中各自的子段范围内运行。
。自由线程:最复杂的线程模式。在自由线程模式中,多个线程可以同时调用相同的方法和组件。
。单元线程比单线程要快,因为有多个组件实例在工作。在某些情况下,自由线程比单元线程更快更有效,这是因为所有事情同时发生,并且可以共享所有资源。但是,当多线程更改共享资源时,这可能会出现问题。


* 多线程代码问题
。如果您有多个线程,请确保它们之间不存在互相等待以到达某一点或完成的情况。如果操作错误,可能会导致死锁状态,两个线程都无法完成,因为它们都在相互等待。
。如果两个线程试图同时访问这些资源,其中一个线程将无法获得资源,或者会导致数据损坏。
。如果一个线程正在将数据写入文件,而另一个线程正在从该文件中读取数据,您将写入文件,而另一个线程正在从该文件中读取数据,您将无法知道哪个线程先完成。这种情况称为竞争状态,因为两个线程都正竞相到达文件末尾。如果读取线程快于写入线程,则将返回无法预料的结果。
。用线程时,还应当考虑所有线程是否都能够完全独立地进行工作。


 

posted @ 2009-04-18 10:25  teacherzj  阅读(207)  评论(0编辑  收藏  举报