zoukankan      html  css  js  c++  java
  • 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);
            }
        }
    }
  • 相关阅读:
    浅谈css中的盒模型(框模型)
    Linux 字符设备驱动及一些简单的Linux知识
    java实现person类 override(重写) comparable接口
    java之内部类
    mac下sublime text3 安装px转rem插件
    python pip安装扩展报错
    curl http_code 状态码
    sed 批量替换文件
    centos 7 开机优化shell
    一个tcp连接可以发多少http请求
  • 原文地址:https://www.cnblogs.com/ilrc/p/15811868.html
Copyright © 2011-2022 走看看