参考

一、异步委托开启线程

  Action<int, int> a = add;
a.BeginInvoke(, , null, null);//前两个是add方法的参数,后两个可以为空
Console.WriteLine("main()");
Console.ReadKey(); static void add(int a, int b)
{
Console.WriteLine(a + b);
}

如果不是开启线程,像平常一样调用的话,应该先输出7,再输出main()

二、通过thread类开启线程

            new Thread(() =>
{
DTTEST();
})
{ IsBackground = true }.Start();
new Thread(() =>
{
DTTEST();
})
{ IsBackground = true }.Start();
new Thread(() =>
{
DTTEST();
})
{ IsBackground = true }.Start(); Thread.Sleep(); static private void DTTEST()
{ Console.WriteLine($"测试并行调用{DateTime.Now}");
}

或者

            Thread thread = new Thread(() =>
{
while (true)
{
Thread.Sleep();
DTTEST();
}
});
thread.Start();

三、通过线程池开启线程

            var param = "哈哈";
ThreadPool.QueueUserWorkItem(obj =>
{
// DTTEST(param);
CallbackDemoViod(obj);
}, param);
ThreadPool.QueueUserWorkItem((o) =>
{
DTTEST(param);
}); private static void CallbackDemoViod(object obj)
{
//以下不catch异常就会导致闪退
try
{
Console.WriteLine(obj.ToString());
}
catch (Exception ex)
{ Console.WriteLine(ex);
} }
static private void DTTEST(string a)
{
try
{
Console.WriteLine(a);
}
catch (Exception ex)
{ Console.WriteLine(ex);
}
}

或者

            var param = "哈哈";
ThreadPool.QueueUserWorkItem(CallbackDemoViod, param);//这种写法方法体参数必须为object private static void CallbackDemoViod(object obj)
{
//以下不catch异常就会导致闪退
try
{
Console.WriteLine(obj.ToString());
}
catch (Exception ex)
{ Console.WriteLine(ex);
} }

或者

            var param = "哈哈";
WaitHandle[] waitHandles = new WaitHandle[]
{
new AutoResetEvent(false),
new AutoResetEvent(false),
new AutoResetEvent(false)
}; ThreadPool.QueueUserWorkItem((o) =>
{
DTTEST(param);
((AutoResetEvent)o).Set();
}, waitHandles[]);
ThreadPool.QueueUserWorkItem((o) =>
{
DTTEST(param);
((AutoResetEvent)o).Set();
}, waitHandles[]);
ThreadPool.QueueUserWorkItem((o) =>
{
DTTEST(param);
((AutoResetEvent)o).Set();
}, waitHandles[]);
WaitHandle.WaitAll(waitHandles); static private void DTTEST(string a)
{
try
{
Console.WriteLine(a);
}
catch (Exception ex)
{ Console.WriteLine(ex);
}
}

4、通过任务开启线程

4.1通过Task

             Task wt1 = Task.Run(() =>
{
DTTEST();
});
Task wt2 = Task.Run(() =>
{
DTTEST();
});
Task wt3 = Task.Run(() =>
{
DTTEST();
});
var wtasks = new Task[] { wt1, wt2, wt3 };
Task.WaitAll(wtasks); static private void DTTEST()
{ Console.WriteLine($"测试并行调用{DateTime.Now}");
}

4.2 Task.Factory.StartNew

            int val = ;

            Task.Factory.StartNew(() =>
{
MessageBox.Show("测试StartNew:无参数");
}); Task.Factory.StartNew(a =>
{
MessageBox.Show("测试StartNew:参数值" + (int)a);
}, val);

5、Invoke实现

                  Parallel.Invoke(
() =>
{
DTTEST();
},
() =>
{
DTTEST();
},
() =>
{
DTTEST();
},
() =>
{
DTTEST();
},
() =>
{
DTTEST();
}
);

参考

最新文章

  1. 初学HTML 常见的标签(二) 列表标签
  2. codeforces 744C Hongcow Buys a Deck of Cards
  3. SDWebImage
  4. Pythonn new-style class and old-style class
  5. django 过滤器 、日期格式化参数
  6. Docker实践(4)—network namespace与veth pair
  7. 多线程/进度条应用(progressbar)
  8. [转]修改maven本地仓库路径
  9. udp开发-dtd验证,dom解析
  10. Sql Server 中事务(begin tran/commit tran/rollback tran)的用法
  11. 解决蛋疼的阿里云单CPU使用率的问题。
  12. springMVC框架下JQuery传递并解析Json数据
  13. FPGA合成编码
  14. JS实现全选,用于界面批量操作向后台传值时使用
  15. Hibernate一对一主键映射
  16. Libgdx 1.5.2发布
  17. jenkins自动化部署vue
  18. Windows 操作系统
  19. 项目部署到服务器上之后request.getRemoteAddr()为什么获取的都是本地地址
  20. Linux下 XordDos(BillGates)木马查杀记录

热门文章

  1. 十 Restful风格
  2. 【剑指Offer面试编程题】题目1369:字符串的排列--九度OJ
  3. SSH Secure Shell 编码设置-----支持中文
  4. 重大消息:华为笔记本电脑开始用LINUX系统
  5. 标准模板库中的链表(list)
  6. Windows中使用QEMU创建树莓派虚拟机
  7. JS中的鼠标移入移除监控操作
  8. AJAX封装数据处理简单操作
  9. Shiro登录身份认证(从SecurityUtils.getSubject().login(token))到Realm的doGetAuthenticationInfo
  10. app开屏广告