利用 Remoting 实现异步队列机制

很多需要提高应用性能(提高立即响应速度(但不立即处理)、提高吞吐能力、提升用户体验)的场景,
都采用异步处理的机制,.Net 中可能用 MSMQ 的实现样例不少,其实自行实现异步队列并不复杂。

最近有两个项目组的同事向我要了类似的关于实现异步队列的方法,
于是翻出了两年以前写的实现 SP 与运营商短信网关通信的上下行短信队列处理相关的代码,
尽管不难,自觉多少有点儿技术含量,拿出来晒晒,

因此去掉了所有的与业务相关的逻辑,保留通用的异步处理功能,
提炼出一套完整的、通用的、核心关键代码,编译后即可运行,方便大家。

该 Remoting 异步队列的实现,主要使用的 .Net 技术是多线程、Remoting、泛型容器类...
流程如下
1.并发若干客户端程序通过调用 RemotingQueue Server 提供的公开远程方法 Enqueue 将数据元素入队尾
2.RemotingQueue Server 发现队列不为空,则并发若干(<n)多线程陆续 Dequeue 队首数据元素并处理

注意:
1.队列的数据元素定义需自行实现
2.对出列数据元素的处理程序需自行实现

本人手懒,就写这么多,不再多写废话!

完整代码如下,注释不多,手懒,请谅解!

利用 Remoting 实现异步队列机制 /*
利用 Remoting 实现异步队列机制Remoting 异步队列实现,流程如下
利用 Remoting 实现异步队列机制1.并发若干客户端程序通过调用 RemotingQueue Server 提供的公开远程方法 Enqueue 将数据元素入队尾
利用 Remoting 实现异步队列机制2.RemotingQueue Server 发现队列不为空,则并发若干线程陆续 Dequeue 队首数据元素并处理
利用 Remoting 实现异步队列机制
利用 Remoting 实现异步队列机制注意:
利用 Remoting 实现异步队列机制1.队列的数据元素定义需自行实现
利用 Remoting 实现异步队列机制2.对出列数据元素的处理程序需自行实现
利用 Remoting 实现异步队列机制
*/

利用 Remoting 实现异步队列机制
//  server.cs
利用 Remoting 实现异步队列机制
// C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\csc.exe server.cs /r:share.dll
利用 Remoting 实现异步队列机制
// .Net 2.0 Remoting 宿主程序 服务 + Console
利用 Remoting 实现异步队列机制
namespace  Microshaoft.RemotingObjects.Server
利用 Remoting 实现异步队列机制
{
利用 Remoting 实现异步队列机制    
using System;
利用 Remoting 实现异步队列机制    
using System.Threading;
利用 Remoting 实现异步队列机制
利用 Remoting 实现异步队列机制    
using System.Collections;
利用 Remoting 实现异步队列机制    
using System.Runtime.Remoting;
利用 Remoting 实现异步队列机制    
using System.Runtime.Remoting.Channels;
利用 Remoting 实现异步队列机制    
using System.Runtime.Remoting.Channels.Tcp;
利用 Remoting 实现异步队列机制    
using System.Runtime.Serialization.Formatters;
利用 Remoting 实现异步队列机制
利用 Remoting 实现异步队列机制    
using System.ServiceProcess;
利用 Remoting 实现异步队列机制    
using System.ComponentModel;
利用 Remoting 实现异步队列机制    
using System.Configuration.Install;
利用 Remoting 实现异步队列机制
利用 Remoting 实现异步队列机制    
using Microshaoft.RemotingObjects.Share;
利用 Remoting 实现异步队列机制
利用 Remoting 实现异步队列机制    
public class RemotingQueueServiceHost : ServiceBase
利用 Remoting 实现异步队列机制    
{
利用 Remoting 实现异步队列机制        
/// <summary>
利用 Remoting 实现异步队列机制        
/// 应用程序的主入口点。
利用 Remoting 实现异步队列机制        
/// </summary>

利用 Remoting 实现异步队列机制        //[STAThread]
利用 Remoting 实现异步队列机制
        static void Main(string[] args)
利用 Remoting 实现异步队列机制        
{
利用 Remoting 实现异步队列机制            
//Microshaoft
利用 Remoting 实现异步队列机制            
//Microshaoft TODO: 在此处添加代码以启动应用程序
利用 Remoting 实现异步队列机制            
//Microshaoft 
利用 Remoting 实现异步队列机制
            RemotingQueueServiceHost service = new RemotingQueueServiceHost();
利用 Remoting 实现异步队列机制            
if (args != null)
利用 Remoting 实现异步队列机制            
{
利用 Remoting 实现异步队列机制                Console.WriteLine(
"Console");
利用 Remoting 实现异步队列机制                service.OnStart(
null);
利用 Remoting 实现异步队列机制                Console.ReadLine();
利用 Remoting 实现异步队列机制                
return;
利用 Remoting 实现异步队列机制            }

利用 Remoting 实现异步队列机制            Console.WriteLine(
"Service");
利用 Remoting 实现异步队列机制            ServiceBase.Run(service);
利用 Remoting 实现异步队列机制        }

利用 Remoting 实现异步队列机制        
protected override void OnStart(string[] args)
利用 Remoting 实现异步队列机制        
{
利用 Remoting 实现异步队列机制            Console.WriteLine(Environment.Version.ToString());
利用 Remoting 实现异步队列机制
利用 Remoting 实现异步队列机制            BinaryServerFormatterSinkProvider provider 
= new BinaryServerFormatterSinkProvider();
利用 Remoting 实现异步队列机制            provider.TypeFilterLevel 
= TypeFilterLevel.Full;
利用 Remoting 实现异步队列机制
利用 Remoting 实现异步队列机制            IDictionary props 
= new Hashtable();
利用 Remoting 实现异步队列机制            props[
"port"= 8080;
利用 Remoting 实现异步队列机制
利用 Remoting 实现异步队列机制            TcpChannel tc 
= new TcpChannel(props, null, provider);
利用 Remoting 实现异步队列机制
利用 Remoting 实现异步队列机制            ChannelServices.RegisterChannel(tc, 
false);
利用 Remoting 实现异步队列机制            RemotingConfiguration.RegisterWellKnownServiceType
利用 Remoting 实现异步队列机制                                    (
利用 Remoting 实现异步队列机制                                        
typeof(RemotingQueue)
利用 Remoting 实现异步队列机制                                        , 
"queueurl"
利用 Remoting 实现异步队列机制                                        , WellKnownObjectMode.Singleton
利用 Remoting 实现异步队列机制                                    );
利用 Remoting 实现异步队列机制            RemotingQueue.OnDequeue 
+= new RemotingQueue.QueueEventHandler(DequeueProcess);
利用 Remoting 实现异步队列机制            Console.WriteLine(
"Server . , Press Enter key to exit.");
利用 Remoting 实现异步队列机制        }

利用 Remoting 实现异步队列机制
利用 Remoting 实现异步队列机制        
public static void DequeueProcess(Item item)
利用 Remoting 实现异步队列机制        
{
利用 Remoting 实现异步队列机制            
//Microshaoft TO DO
利用 Remoting 实现异步队列机制            
//Microshaoft 队列的数据元素定义需自行实现
利用 Remoting 实现异步队列机制            
//Microshaoft 数据库访问
利用 Remoting 实现异步队列机制            
//Microshaoft 发邮件等
利用 Remoting 实现异步队列机制

利用 Remoting 实现异步队列机制            DateTime DequeueTime 
= DateTime.Now;
利用 Remoting 实现异步队列机制
利用 Remoting 实现异步队列机制            
//Microshaoft Thread.Sleep(100); //Microshaoft 模拟长时间任务
利用 Remoting 实现异步队列机制

利用 Remoting 实现异步队列机制            DateTime EndTime 
= DateTime.Now;
利用 Remoting 实现异步队列机制            Console.WriteLine
利用 Remoting 实现异步队列机制                        (
利用 Remoting 实现异步队列机制                            
"QueueRemainCount {0}, Enqueue {1}, Dequeue {2},[{3}], End {4},[{5}],[{6}]"
利用 Remoting 实现异步队列机制                            , RemotingQueue.Count
利用 Remoting 实现异步队列机制                            , item.EnqueueTime
利用 Remoting 实现异步队列机制                            , DequeueTime
利用 Remoting 实现异步队列机制                            , (DequeueTime.Ticks 
- item.EnqueueTime.Ticks)/10000
利用 Remoting 实现异步队列机制                            , EndTime
利用 Remoting 实现异步队列机制                            , (EndTime.Ticks 
- DequeueTime.Ticks)/10000
利用 Remoting 实现异步队列机制                            , RemotingQueue.ConcurrentThreadsCount
利用 Remoting 实现异步队列机制                        );
利用 Remoting 实现异步队列机制        }

利用 Remoting 实现异步队列机制    }

利用 Remoting 实现异步队列机制    [RunInstallerAttribute(
true)]
利用 Remoting 实现异步队列机制    
public class ProjectInstaller: Installer
利用 Remoting 实现异步队列机制    
{
利用 Remoting 实现异步队列机制
利用 Remoting 实现异步队列机制        
private ServiceInstaller serviceInstaller;
利用 Remoting 实现异步队列机制        
private ServiceProcessInstaller processInstaller;
利用 Remoting 实现异步队列机制
利用 Remoting 实现异步队列机制        
public ProjectInstaller()
利用 Remoting 实现异步队列机制        
{
利用 Remoting 实现异步队列机制
利用 Remoting 实现异步队列机制            processInstaller 
= new ServiceProcessInstaller();
利用 Remoting 实现异步队列机制            serviceInstaller 
= new ServiceInstaller();
利用 Remoting 实现异步队列机制
利用 Remoting 实现异步队列机制            
//Microshaoft  Service will run under system account
利用 Remoting 实现异步队列机制
            processInstaller.Account = ServiceAccount.LocalSystem;
利用 Remoting 实现异步队列机制
利用 Remoting 实现异步队列机制            
//Microshaoft  Service will have Start Type of Manual
利用 Remoting 实现异步队列机制
            serviceInstaller.StartType = ServiceStartMode.Manual;
利用 Remoting 实现异步队列机制
利用 Remoting 实现异步队列机制            serviceInstaller.ServiceName 
= "RemotingQueueService";
利用 Remoting 实现异步队列机制
利用 Remoting 实现异步队列机制            Installers.Add(serviceInstaller);
利用 Remoting 实现异步队列机制            Installers.Add(processInstaller);
利用 Remoting 实现异步队列机制        }

利用 Remoting 实现异步队列机制    }

利用 Remoting 实现异步队列机制}

利用 Remoting 实现异步队列机制
// Microshaoft =====================
利用 Remoting 实现异步队列机制
// Microshaoft Remoting Server Object
利用 Remoting 实现异步队列机制

利用 Remoting 实现异步队列机制
namespace  Microshaoft.RemotingObjects
利用 Remoting 实现异步队列机制
{
利用 Remoting 实现异步队列机制    
using System;
利用 Remoting 实现异步队列机制    
using System.IO;
利用 Remoting 实现异步队列机制    
using System.Net;
利用 Remoting 实现异步队列机制    
using System.Web;
利用 Remoting 实现异步队列机制    
using System.Text;
利用 Remoting 实现异步队列机制
利用 Remoting 实现异步队列机制    
using System.Threading;
利用 Remoting 实现异步队列机制    
using System.Configuration;
利用 Remoting 实现异步队列机制
利用 Remoting 实现异步队列机制    
using System.Collections.Generic;
利用 Remoting 实现异步队列机制
利用 Remoting 实现异步队列机制    
using Microshaoft.RemotingObjects.Share;
利用 Remoting 实现异步队列机制
利用 Remoting 实现异步队列机制    
public class RemotingQueue : MarshalByRefObject
利用 Remoting 实现异步队列机制    
{
利用 Remoting 实现异步队列机制        
public delegate void QueueEventHandler(Item item);
利用 Remoting 实现异步队列机制        
public static event QueueEventHandler OnDequeue;
利用 Remoting 实现异步队列机制
利用 Remoting 实现异步队列机制        
private static Queue<Item> _Queue = new Queue<Item>();
利用 Remoting 实现异步队列机制        
private static object _SyncLockObject = new object();
利用 Remoting 实现异步队列机制        
private static int _MaxConcurrentThreadsCount = 10//Microshaoft 允许并发出列处理线程数为 10
利用 Remoting 实现异步队列机制
        private static int _ConcurrentThreadsCount = 0//Microshaoft 用于控制并发线程数 
利用 Remoting 实现异步队列机制

利用 Remoting 实现异步队列机制        
private static bool _QueueRuning = false;
利用 Remoting 实现异步队列机制
利用 Remoting 实现异步队列机制
利用 Remoting 实现异步队列机制        
//Microshaoft 服务启动后可立即开启新的线程调用此方法(死循环)
利用 Remoting 实现异步队列机制
        private static void QueueRun() //Microshaoft ThreadStart
利用 Remoting 实现异步队列机制
        {
利用 Remoting 实现异步队列机制            
if (!_QueueRuning)
利用 Remoting 实现异步队列机制            
{
利用 Remoting 实现异步队列机制                _QueueRuning 
= true;
利用 Remoting 实现异步队列机制                
lock (_SyncLockObject)
利用 Remoting 实现异步队列机制                
{
利用 Remoting 实现异步队列机制                    ThreadStart ts 
= new ThreadStart(QueueRunThreadProcess);
利用 Remoting 实现异步队列机制                    Thread t 
= new Thread(ts);
利用 Remoting 实现异步队列机制                    t.Name 
= "QueueRunThreadProcess";
利用 Remoting 实现异步队列机制                    t.Start();
利用 Remoting 实现异步队列机制                }

利用 Remoting 实现异步队列机制            }

利用 Remoting 实现异步队列机制        }

利用 Remoting 实现异步队列机制
利用 Remoting 实现异步队列机制        
public static int Count
利用 Remoting 实现异步队列机制        
{
利用 Remoting 实现异步队列机制            
get
利用 Remoting 实现异步队列机制            
{
利用 Remoting 实现异步队列机制                
return _Queue.Count;
利用 Remoting 实现异步队列机制            }

利用 Remoting 实现异步队列机制        }

利用 Remoting 实现异步队列机制
利用 Remoting 实现异步队列机制        
public static int ConcurrentThreadsCount
利用 Remoting 实现异步队列机制        
{
利用 Remoting 实现异步队列机制            
get
利用 Remoting 实现异步队列机制            
{
利用 Remoting 实现异步队列机制                
return _ConcurrentThreadsCount;
利用 Remoting 实现异步队列机制            }

利用 Remoting 实现异步队列机制        }

利用 Remoting 实现异步队列机制
利用 Remoting 实现异步队列机制        
private static void QueueRunThreadProcess()
利用 Remoting 实现异步队列机制        
{
利用 Remoting 实现异步队列机制            Console.WriteLine(
"Queue Runing ");
利用 Remoting 实现异步队列机制            
while (_Queue.Count > 0//Microshaoft 死循环
利用 Remoting 实现异步队列机制
            {
利用 Remoting 实现异步队列机制                Item item 
= null;
利用 Remoting 实现异步队列机制                
lock(_SyncLockObject)
利用 Remoting 实现异步队列机制                
{
利用 Remoting 实现异步队列机制                    
if (_ConcurrentThreadsCount < _MaxConcurrentThreadsCount)
利用 Remoting 实现异步队列机制                    
{
利用 Remoting 实现异步队列机制                        
if (_Queue.Count > 0)
利用 Remoting 实现异步队列机制                        
{
利用 Remoting 实现异步队列机制                            
//_ConcurrentThreadsCount ++;
利用 Remoting 实现异步队列机制
                            Interlocked.Increment(ref _ConcurrentThreadsCount);
利用 Remoting 实现异步队列机制                            item 
= _Queue.Dequeue();
利用 Remoting 实现异步队列机制                        }

利用 Remoting 实现异步队列机制                    }

利用 Remoting 实现异步队列机制                }

利用 Remoting 实现异步队列机制                
if (item != null)
利用 Remoting 实现异步队列机制                
{
利用 Remoting 实现异步队列机制                    
//Microshaoft ThreadPool.QueueUserWorkItem(new WaitCallback(OnDequeueThreadProcess), item);
利用 Remoting 实现异步队列机制
                    ThreadProcessState tps = new ThreadProcessState();
利用 Remoting 实现异步队列机制
利用 Remoting 实现异步队列机制                    tps.Item 
= item;
利用 Remoting 实现异步队列机制                    Thread t 
= new Thread(new ThreadStart(tps.ThreadProcess));
利用 Remoting 实现异步队列机制                    t.Name 
= string.Format("ConcurrentThread[{0}]", _ConcurrentThreadsCount);
利用 Remoting 实现异步队列机制                    t.Start();
利用 Remoting 实现异步队列机制                }

利用 Remoting 实现异步队列机制            }

利用 Remoting 实现异步队列机制            _QueueRuning 
= false;
利用 Remoting 实现异步队列机制            Console.WriteLine(
"Queue Running Stopped ");
利用 Remoting 实现异步队列机制        }

利用 Remoting 实现异步队列机制
利用 Remoting 实现异步队列机制        
public void Enqueue(Item item)
利用 Remoting 实现异步队列机制        
{
利用 Remoting 实现异步队列机制            
//Microshaoft 队列的数据元素定义需自行实现 Item
利用 Remoting 实现异步队列机制
            item.EnqueueTime = DateTime.Now;
利用 Remoting 实现异步队列机制            _Queue.Enqueue(item);
利用 Remoting 实现异步队列机制            
//Microshaoft Console.WriteLine("Enqueue {0}", item.Name);
利用 Remoting 实现异步队列机制
            if (!_QueueRuning)
利用 Remoting 实现异步队列机制            
{
利用 Remoting 实现异步队列机制                QueueRun();
利用 Remoting 实现异步队列机制            }

利用 Remoting 实现异步队列机制        }

利用 Remoting 实现异步队列机制
利用 Remoting 实现异步队列机制        
private static void OnDequeueThreadProcess(Item item)
利用 Remoting 实现异步队列机制        
{
利用 Remoting 实现异步队列机制            
try
利用 Remoting 实现异步队列机制            
{
利用 Remoting 实现异步队列机制                
if (OnDequeue != null)
利用 Remoting 实现异步队列机制                
{
利用 Remoting 实现异步队列机制                    OnDequeue(item);
利用 Remoting 实现异步队列机制                }

利用 Remoting 实现异步队列机制                DequeueThreadProcess();
利用 Remoting 实现异步队列机制            }

利用 Remoting 实现异步队列机制            
catch (Exception ex)
利用 Remoting 实现异步队列机制            
{
利用 Remoting 实现异步队列机制                Console.WriteLine(ex.Message);
利用 Remoting 实现异步队列机制            }

利用 Remoting 实现异步队列机制            
finally
利用 Remoting 实现异步队列机制            
{
利用 Remoting 实现异步队列机制
///                lock (_SyncLockObject)
利用 Remoting 实现异步队列机制
///                {

利用 Remoting 实现异步队列机制                    //Microshaoft Console.WriteLine("工作线程数: {0}", _ConcurrentThreadsCount - 1);
利用 Remoting 实现异步队列机制                    
//_ConcurrentThreadsCount --;
利用 Remoting 实现异步队列机制
                    Interlocked.Decrement(ref _ConcurrentThreadsCount);
利用 Remoting 实现异步队列机制
///                }
利用 Remoting 实现异步队列机制            }

利用 Remoting 实现异步队列机制        }

利用 Remoting 实现异步队列机制        
static int count = 0;
利用 Remoting 实现异步队列机制        
private static void DequeueThreadProcess()
利用 Remoting 实现异步队列机制        
{
利用 Remoting 实现异步队列机制            
while (_Queue.Count > 0)
利用 Remoting 实现异步队列机制            
{
利用 Remoting 实现异步队列机制                Item item 
= null;
利用 Remoting 实现异步队列机制                
lock (_SyncLockObject)
利用 Remoting 实现异步队列机制                
{
利用 Remoting 实现异步队列机制                    
if (_Queue.Count > 0)
利用 Remoting 实现异步队列机制                    
{
利用 Remoting 实现异步队列机制                        item 
= _Queue.Dequeue();
利用 Remoting 实现异步队列机制                        
//count ++;
利用 Remoting 实现异步队列机制
                        Interlocked.Increment(ref count);
利用 Remoting 实现异步队列机制                        
//Microshaoft Console.WriteLine("Queue Count: {0},count: {1}", _Queue.Count, count);
利用 Remoting 实现异步队列机制
                    }

利用 Remoting 实现异步队列机制                }

利用 Remoting 实现异步队列机制                
if (item != null)
利用 Remoting 实现异步队列机制                
{
利用 Remoting 实现异步队列机制
利用 Remoting 实现异步队列机制                    
if (OnDequeue != null)
利用 Remoting 实现异步队列机制                    
{
利用 Remoting 实现异步队列机制                        OnDequeue(item);
利用 Remoting 实现异步队列机制                    }

利用 Remoting 实现异步队列机制
利用 Remoting 实现异步队列机制                }

利用 Remoting 实现异步队列机制            }

利用 Remoting 实现异步队列机制        }

利用 Remoting 实现异步队列机制
利用 Remoting 实现异步队列机制        
private class ThreadProcessState
利用 Remoting 实现异步队列机制        
{
利用 Remoting 实现异步队列机制            
private Item _item;
利用 Remoting 实现异步队列机制            
public Item Item
利用 Remoting 实现异步队列机制            
{
利用 Remoting 实现异步队列机制                
get
利用 Remoting 实现异步队列机制                
{
利用 Remoting 实现异步队列机制                    
return _item;
利用 Remoting 实现异步队列机制                }

利用 Remoting 实现异步队列机制                
set
利用 Remoting 实现异步队列机制                
{
利用 Remoting 实现异步队列机制                    _item 
= value;
利用 Remoting 实现异步队列机制                }

利用 Remoting 实现异步队列机制            }

利用 Remoting 实现异步队列机制            
public void ThreadProcess()
利用 Remoting 实现异步队列机制            
{
利用 Remoting 实现异步队列机制                
//Microshaoft Console.WriteLine("{0} Thread Start:", Thread.CurrentThread.Name);
利用 Remoting 实现异步队列机制
                RemotingQueue.OnDequeueThreadProcess(_item);
利用 Remoting 实现异步队列机制                
//Microshaoft Console.WriteLine("{0} Thread End!", Thread.CurrentThread.Name);
利用 Remoting 实现异步队列机制
                if (RemotingQueue._ConcurrentThreadsCount == 0)
利用 Remoting 实现异步队列机制                
{
利用 Remoting 实现异步队列机制                    Console.WriteLine(
"All Threads Finished! Queue Count {0}", RemotingQueue.Count);
利用 Remoting 实现异步队列机制                }

利用 Remoting 实现异步队列机制            }

利用 Remoting 实现异步队列机制        }

利用 Remoting 实现异步队列机制    }

利用 Remoting 实现异步队列机制}

利用 Remoting 实现异步队列机制

 

利用 Remoting 实现异步队列机制 //  share.cs
利用 Remoting 实现异步队列机制
// Server、Client 均需引用此 share.dll
利用 Remoting 实现异步队列机制
利用 Remoting 实现异步队列机制
// C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\csc.exe /t:library share.cs
利用 Remoting 实现异步队列机制
// TO DO
利用 Remoting 实现异步队列机制
// 队列的数据元素定义需自行实现,示例如下:
利用 Remoting 实现异步队列机制
namespace  Microshaoft.RemotingObjects.Share
利用 Remoting 实现异步队列机制
{
利用 Remoting 实现异步队列机制    
using System;
利用 Remoting 实现异步队列机制    [Serializable]
利用 Remoting 实现异步队列机制    
public class Item
利用 Remoting 实现异步队列机制    
{
利用 Remoting 实现异步队列机制        
private string _Name;
利用 Remoting 实现异步队列机制        
public string Name
利用 Remoting 实现异步队列机制        
{
利用 Remoting 实现异步队列机制            
get
利用 Remoting 实现异步队列机制            
{
利用 Remoting 实现异步队列机制                
return _Name;
利用 Remoting 实现异步队列机制            }

利用 Remoting 实现异步队列机制            
set
利用 Remoting 实现异步队列机制            
{
利用 Remoting 实现异步队列机制                _Name 
= value; 
利用 Remoting 实现异步队列机制            }

利用 Remoting 实现异步队列机制        }

利用 Remoting 实现异步队列机制        
private DateTime _EnqueueTime;
利用 Remoting 实现异步队列机制        
public DateTime EnqueueTime
利用 Remoting 实现异步队列机制        
{
利用 Remoting 实现异步队列机制            
get
利用 Remoting 实现异步队列机制            
{
利用 Remoting 实现异步队列机制                
return _EnqueueTime;
利用 Remoting 实现异步队列机制            }

利用 Remoting 实现异步队列机制            
set
利用 Remoting 实现异步队列机制            
{
利用 Remoting 实现异步队列机制                _EnqueueTime 
= value; 
利用 Remoting 实现异步队列机制            }

利用 Remoting 实现异步队列机制        }

利用 Remoting 实现异步队列机制
利用 Remoting 实现异步队列机制    }

利用 Remoting 实现异步队列机制}

 

利用 Remoting 实现异步队列机制 //  client.cs
利用 Remoting 实现异步队列机制
// C:\WINDOWS\Microsoft.NET\Framework\v1.1.4322\csc.exe client.cs /r:share.dll
利用 Remoting 实现异步队列机制
namespace  Microshaoft.RemotingObjects.Client
利用 Remoting 实现异步队列机制
{
利用 Remoting 实现异步队列机制    
using System;
利用 Remoting 实现异步队列机制    
using System.Collections;
利用 Remoting 实现异步队列机制
利用 Remoting 实现异步队列机制    
using System.Runtime.Remoting;
利用 Remoting 实现异步队列机制    
using System.Runtime.Remoting.Channels;
利用 Remoting 实现异步队列机制    
using System.Runtime.Remoting.Channels.Tcp;
利用 Remoting 实现异步队列机制    
using System.Runtime.Serialization.Formatters;
利用 Remoting 实现异步队列机制
利用 Remoting 实现异步队列机制    
using System.Threading;
利用 Remoting 实现异步队列机制
利用 Remoting 实现异步队列机制    
using Microshaoft.RemotingObjects;
利用 Remoting 实现异步队列机制    
using Microshaoft.RemotingObjects.Share;
利用 Remoting 实现异步队列机制
利用 Remoting 实现异步队列机制    
public class Class1
利用 Remoting 实现异步队列机制    
{
利用 Remoting 实现异步队列机制        
static RemotingQueue _queue;
利用 Remoting 实现异步队列机制        
public static void Main()
利用 Remoting 实现异步队列机制        
{
利用 Remoting 实现异步队列机制            Console.WriteLine(Environment.Version.ToString());
利用 Remoting 实现异步队列机制            Class1 a 
= new Class1();
利用 Remoting 实现异步队列机制            a.Run();
利用 Remoting 实现异步队列机制        }

利用 Remoting 实现异步队列机制
利用 Remoting 实现异步队列机制
利用 Remoting 实现异步队列机制        
public void Run()
利用 Remoting 实现异步队列机制        
{
利用 Remoting 实现异步队列机制            _queue 
= (RemotingQueue) Activator.GetObject
利用 Remoting 实现异步队列机制                                                (
利用 Remoting 实现异步队列机制                                                    
typeof(RemotingQueue)
利用 Remoting 实现异步队列机制                                                    , 
"tcp://127.0.0.1:8080/queueUrl"
利用 Remoting 实现异步队列机制                                                );
利用 Remoting 实现异步队列机制
利用 Remoting 实现异步队列机制            
//Microshaoft 以下是耗时的主程序
利用 Remoting 实现异步队列机制
            for (int i = 0; i < 100; i++)
利用 Remoting 实现异步队列机制            
{
利用 Remoting 实现异步队列机制                Thread x 
= new Thread(new ThreadStart(ThreadProcess));
利用 Remoting 实现异步队列机制                x.Start();
利用 Remoting 实现异步队列机制            }

利用 Remoting 实现异步队列机制        }

利用 Remoting 实现异步队列机制        
public void ThreadProcess()
利用 Remoting 实现异步队列机制        
{
利用 Remoting 实现异步队列机制            
for (int i = 0; i < 100; i++)
利用 Remoting 实现异步队列机制            
{
利用 Remoting 实现异步队列机制                Item x 
= new Item();
利用 Remoting 实现异步队列机制                DateTime EnqueueTime 
= DateTime.Now;
利用 Remoting 实现异步队列机制                x.Name 
= EnqueueTime.ToString();
利用 Remoting 实现异步队列机制                _queue.Enqueue(x);
利用 Remoting 实现异步队列机制                Console.WriteLine
利用 Remoting 实现异步队列机制                            (
利用 Remoting 实现异步队列机制                                
"Enqueue: {0},[{1}]"
利用 Remoting 实现异步队列机制                                , EnqueueTime
利用 Remoting 实现异步队列机制                                , (DateTime.Now.Ticks 
- EnqueueTime.Ticks)/10000
利用 Remoting 实现异步队列机制                            );
利用 Remoting 实现异步队列机制            }

利用 Remoting 实现异步队列机制
利用 Remoting 实现异步队列机制        }

利用 Remoting 实现异步队列机制    }

利用 Remoting 实现异步队列机制}

利用 Remoting 实现异步队列机制
// Microshaoft =========================================
利用 Remoting 实现异步队列机制
// Microshaoft Remoting Object Client Local Proxy
利用 Remoting 实现异步队列机制

利用 Remoting 实现异步队列机制
namespace  Microshaoft.RemotingObjects
利用 Remoting 实现异步队列机制
{
利用 Remoting 实现异步队列机制    
using System;
利用 Remoting 实现异步队列机制    
using Microshaoft.RemotingObjects.Share;
利用 Remoting 实现异步队列机制
利用 Remoting 实现异步队列机制
利用 Remoting 实现异步队列机制    
public interface RemotingQueue
利用 Remoting 实现异步队列机制    
{
利用 Remoting 实现异步队列机制        
void Enqueue(Item item);
利用 Remoting 实现异步队列机制    }

利用 Remoting 实现异步队列机制}

利用 Remoting 实现异步队列机制

 

你可能感兴趣的:(队列)