1. 给线程传递参数
1.1 使用 lambda 表达式
Thread t = new Thread(()=>Print("Hello from t"));
t.Start();
使用这种方式可以响新线程传递任意个参数,甚至可以把方法到实现都放到 lambda 表达式中.
new Thread((String name, String value)=>{Console.WriteLine(name);
Console.WriteLine(value);}).Start();
2. 获取线程返回值
2.1 使用 Task 获取返回值
Task<String> task = Task.Factory.StartNew<string>(()=>DownloadString("http://ww.linqpad.net"));
RunSomeOtherMethod();
String taskResult = task.Result;
<String> 用来说明这个 Task 返回一个 String 结果值. 这个值是 DownloadString() 方法都返回值.
2.2 使用异步委托获取返回值
Func<string, int> method = Work;
IAsyncResult cookie = method.BeginInvoke("test",null,null);
//
//.....做其他并行工作
//
int result = method.EndInvoke(cookie);
异步委托可以向线程传递任意多参数,获取任意多返回值. 通常需要先定义 Func 委托, 指向要并行执行的方法, Func 委托执行方法后结果保存在 IAsyncResult 对象中, 通过 EndInvoke 方法取出返回值.