.net 4.0为我们带来了TPL(Task Parallel Library),其中Task相较ThreadPool线程池使用更简单,而且支持线程的取消,完成和失败通知等交互性操作,而这些是ThreadPool所没有的。并且Task是可以有返回值的。
传参
给异步方法传参,可以使用以下几种方法。

1 new Thread(Go1).Start("arg1");//最原始的传参 2 new Thread(delegate() //使用匿名委托传参 3 { 4 Go1("arg1"); 5 }).Start(); 6 new Thread(() => //使用lambda表达式 7 { 8 Go1("arg1"); 9 }).Start();
可以有返回值
Thread和ThreadPool都不能有返回值,但Task是可以有返回值的。

1 var result = Task.Factory.StartNew<string>(() => 2 { 3 return Go1("arg1"); 4 });
Demo
上代码。

1 using System; 2 using System.Collections.Generic; 3 using System.Linq; 4 using System.Text; 5 using System.Threading; 6 using System.Threading.Tasks; 7 8 namespace AsyncCoding 9 { 10 class Program 11 { 12 static void Main(string[] args) 13 { 14 Task.Factory.StartNew(() => //Task默认创建的都是后台线程 15 { 16 Go1("arg1"); 17 }); 18 19 Console.WriteLine("我是主线程,Thread Id:{0}", Thread.CurrentThread.ManagedThreadId); 20 Console.ReadKey(); 21 } 22 23 public static void Go1(string input) 24 { 25 Console.WriteLine("我是异步线程,Thread Id:{0},是否为后台线程:{1}, 传入参数为:{2}", Thread.CurrentThread.ManagedThreadId, Thread.CurrentThread.IsBackground, input); 26 for (int i = 0; i < 10; i++) 27 { 28 Thread.Sleep(100);//模拟每次执行需要100ms 29 Console.WriteLine("异步线程,Thread Id:{0},运行:{1}", Thread.CurrentThread.ManagedThreadId, i); 30 } 31 } 32 } 33 } 34
代码执行顺序图解。
运行结果如下图。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
· 周边上新:园子的第一款马克杯温暖上架