1.定义一个线程
var task1 = Task.Factory.StartNew(() => DoSomeWork());
方法如下:
View Code
private static object DoSomeWork()
{
Console.WriteLine("nihao ");
System.Threading.Thread.Sleep(3000);
Console.Write("nihao ");
return "xiexie";
}
2.多线程执行后,执行另一个方法
var task1 = Task.Factory.StartNew(() => DoSomeWork()).ContinueWith(
task => { Console.WriteLine(task.Result.ToString()); }).ContinueWith(
task => { Console.WriteLine(task.Result.ToString()); });
3.等待所有线程结束
var task1 = Task.Factory.StartNew(() => DoSomeWork());
var task2 = Task.Factory.StartNew(() => DoSomeWork());
var task3 = Task.Factory.StartNew(() => DoSomeWork());
Task.WaitAll(task1, task2, task3);
4.等待其中一个线程结束
var task1 = Task.Factory.StartNew(() => DoSomeWork());
var task2 = Task.Factory.StartNew(() => DoSomeWork());
var task3 = Task.Factory.StartNew(() => DoSomeWork());
Task.WaitAny(task1, task2, task3);
5.等待所有线程结束执行的方法
var task1 = Task.Factory.StartNew(() =>
{
Thread.Sleep(3000);
return "dummy value 1";
});
var task2 = Task.Factory.StartNew(() =>
{
Thread.Sleep(3000);
return "dummy value 2";
});
var task3 = Task.Factory.StartNew(() =>
{
Thread.Sleep(3000);
return "dummy value 3";
});
Task.Factory.ContinueWhenAll(new[] { task1, task2, task3 }, tasks =>
{
foreach (Task<string> task in tasks)
{
Console.WriteLine(task.Result);
}
});
如果要往线程里传递参数,Task构造函数提供的重载,可以传入一个object类型的参数:
1: Task task = new Task(TaskMethodWithParameter, "Hello world");
2: task.Start();
下面是带参的线程方法:
1: static void TaskMethodWithParameter(object param)
2: {
3: for (int i = 0; i < 10; i++)
4: {
5: Console.WriteLine(String.Format("Running in a task. Parameter: {0}", param));
6: Thread.Sleep(500);
7: }
8: }
//其他参考资料
http://www.cnblogs.com/huangxincheng/archive/2012/04/03/2430638.html