多线程处理文档队列

    public class Document
    {
        public string Title { get; private set; }
        public string Content { get; private set; }
        public Document(string title, string content)
        {
            this.Title = title;
            this.Content = content;
        }
    }

    public class DocumentManager
    {
        private readonly Queue<Document> documentQueue=new Queue<Document>();
        public void AddDocument(Document doc) //添加文档到队列
        {
            lock (this)
            {
                documentQueue.Enqueue(doc);
            }
        
        }
        public Document GetDocument()     //删除队列到文档
        {
            Document doc = null;
            lock (this)
            {
                doc=documentQueue.Dequeue();
            }
            return doc;
        }
        public bool IsDocumentAvailable  //队列的文档数
        {
            get
            {
                return documentQueue.Count > 0;
            }
        }

 public class ProcessDocument
    {
        private DocumentManager documentManager;
        public static void Start(DocumentManager dm)
        {
            new Thread(new ProcessDocument(dm).Run).Start();
        }
        protected ProcessDocument(DocumentManager dm)
        {
            documentManager = dm;
            //Console.WriteLine("初始化完成");
         
        }
        protected void Run()
        {
            while (true)
            {
                if (documentManager.IsDocumentAvailable)
                {
                    Document doc = documentManager.GetDocument();   //从队列去文档
                    Console.WriteLine("Processing document从队列中取出文档并删除队列中的文档 {0}", doc.Title);
                    Program.WriteLog(string.Format("Processing document 从队列中取出文档并删除队列中的文档 {0}", doc.Title));
                }
                Thread.Sleep(new Random().Next(20));
              
               
            }
        }


    }

 class Program
    {
        static void Main(string[] args)
        {
            var dm = new DocumentManager();
            ProcessDocument.Start(dm);
            for (int i = 0; i < 1000; i++)
            {
                Document doc = new Document(" Doc" + i.ToString(), "content");
                dm.AddDocument(doc); //添加队列到文档
                //Stream stream = File.Create("console.out.log");
                //StreamWriter writer = new StreamWriter(stream);
                //Console.SetOut(writer);
                Console.WriteLine("Added document {0}", doc.Title);
                WriteLog(string.Format("Added document {0}",doc.Title));
                 //WriteLog
                Console.Title = "队列测试";
            }
          
        }
        public static void WriteLog(string str)
        {
            //string filePath = System.Environment.CurrentDirectory.Replace("bin\Debug","log");
           string  logPath = (AppDomain.CurrentDomain.BaseDirectory+ @"logapplog.txt").Replace("bin\Debug\","");
            //string logPath = AppDomain.CurrentDomain.BaseDirectory + @"logapplog.txt";
          


                FileStream fs = new FileStream(logPath, FileMode.Append, FileAccess.Write, FileShare.ReadWrite);  //若存改文件则将日志插入到文本末尾,创建一个新文件
                using (StreamWriter sw = new StreamWriter(fs,UnicodeEncoding.UTF8))
                {
                    //lock (sw)
                    //{
                   
                        sw.WriteLine(str);
                        sw.Close();
                    //}
                }
                fs.Close();       
        }
    }

原文地址:https://www.cnblogs.com/lykbk/p/fthyfrtghfgh4564565465465.html