设为首页 加入收藏

TOP

异步和多线程Thread(四)
2019-09-23 11:16:44 】 浏览:124
Tags:异步 线程 Thread
vent mre = new ManualResetEvent(false); //false---关闭---Set打开---true---WaitOne就能通过 //true---打开--ReSet关闭---false--WaitOne就只能等待 ThreadPool.QueueUserWorkItem(o => { this.DoSomethingLong("btnThreadPool_Click1"); mre.Set(); }); Console.WriteLine("Do Something else..."); Console.WriteLine("Do Something else..."); Console.WriteLine("Do Something else..."); mre.WaitOne(); Console.WriteLine("任务已经完成了。。。");

执行结果:

 

 

 不要阻塞线程池里面的线程:

ThreadPool.SetMaxThreads(8, 8);
ManualResetEvent mre = new ManualResetEvent(false);
for (int i = 0; i < 10; i++)
{
    int k = i;
    ThreadPool.QueueUserWorkItem(t =>
    {
        Console.WriteLine($"{Thread.CurrentThread.ManagedThreadId.ToString("00")} show {k}");
        if (k == 9)
        {
            mre.Set();
        }
        else
        {
            mre.WaitOne();
        }
    });
}
if (mre.WaitOne())
{
    Console.WriteLine("任务全部执行成功!");
}

 

   程序卡在这里了,因为,线程池里面就只有八个线程,现在有8个线程都在等,这就形成了死锁,程序就卡在这。所以不要阻塞线程池里面的线程。

 

篇幅有点多,下面一篇笔记介绍.NET Framework3.0出来的Task,以及async和await

  

首页 上一页 1 2 3 4 下一页 尾页 4/4/4
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇一步步到IOC 下一篇两种查看EFCore生成Sql语句的方法

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目