C#中多线程调用方式的几种实现
作者:铃儿~响叮当
本文主要介绍了C#中几种多线程调用方式,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
1. 样例代码
public class TestTasks
{
//1. 无参 无返回值
public void Task1()
{
Debug.WriteLine("-------Task1.Start...");
Thread.Sleep(3000);
Debug.WriteLine("-------Task1.End...");
}
//2. 有参 无返回值
public void Task2(int param)
{
Debug.WriteLine("-------Task2.Start..." + param);
Thread.Sleep(3000);
Debug.WriteLine("-------Task2.End...");
}
//3. 有参 有返回值
public int Task3(int param)
{
Debug.WriteLine("-------Task3.Start..." + param);
Thread.Sleep(3000);
Debug.WriteLine("-------Task3.End...");
return param + 1;
}
}2. 方式1:Task 方式(推荐)
TestTasks tt = new TestTasks();
//t1:
Task t1 = Task.Factory.StartNew(tt.Task1);
//t2: 传参用lambda表达式
Task t2 = Task.Factory.StartNew(() => tt.Task2(102));
//等待 t1 t2 执行完成之后,再执行 t3.
Task.WaitAll(t1, t2);
//t3: 带返回值
Task<int> t3 = Task.Factory.StartNew(() => tt.Task3(103));
Debug.WriteLine("-------t3: " + t3.Result);3. 方式2:Async / Await 方式 (较为推荐)
TestTasks tt = new TestTasks();
//添加 await, Task 依次执行。
await Task.Factory.StartNew(tt.Task1);
await Task.Factory.StartNew(() => tt.Task2(102));
var result = await Task.Factory.StartNew(() => tt.Task3(103));
Debug.WriteLine("-------t3: " + result);4. 方式3:创建线程
TestTasks tt = new TestTasks(); new Thread(tt.Task1).Start(); //针对有参数的任务,需要用Lambda进行包装或者使用ParameterizedThreadStart对象. new Thread(x => tt.Task2((int)x)).Start(100); //但是无法执行带返回值的方法。
5. 方式4:线程池
TestTasks tt = new TestTasks(); ThreadPool.QueueUserWorkItem(o => tt.Task1()); ThreadPool.QueueUserWorkItem(o => tt.Task2(102)); ThreadPool.QueueUserWorkItem(o => tt.Task3(103));
到此这篇关于C#中多线程调用方式的几种实现的文章就介绍到这了,更多相关C# 多线程调用方式内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
