Task.Factory.StartNew和Queue应用

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);
        }
    }
}
原文地址:https://www.cnblogs.com/ilrc/p/15811868.html