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