using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading; using System.Threading.Tasks; namespace 处理队列文档 { class Program { static void Main(string[] args) { documentManager dm = new documentManager(); ProcessDocument.start(dm); for (int i =0;i<100;i++) { dm.AddDocument(new Document("title" + i, "content")); } Console.ReadKey(); } } class Document { public string title { get; set; } public string content { get; private set; } public Document(string title ,string content) { this.title = title; this.content = content; } } class documentManager { private Queue<Document> que = new Queue<Document>(); public void AddDocument(Document doc ) { lock(this) { que.Enqueue(doc); Console.WriteLine("新增的doc.tile" + doc.title); } } public Document GetDocument() { Document doc = null; lock (this) { doc = que.Dequeue(); } return doc; } public bool isDocumentAvailable => que.Count > 1; } class ProcessDocument { private documentManager dm ; protected ProcessDocument(documentManager dm) { if(dm == null) { throw new ArgumentNullException(); } this.dm = dm; } public void run() { if(dm.isDocumentAvailable) { while (true) { Console.WriteLine("tile:" + dm.GetDocument().title); Thread.Sleep(new Random().Next(20)); } } } public static void start(documentManager dm) { Task.Factory.StartNew(new ProcessDocument(dm).run); } } }