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);
}
}
}