http://www.cnblogs.com/czllfy/archive/2011/04/15/2016733.html
//没有返回值 //定义 Task StartNew(Action action);
//Task.Factory.StartNew 相当于Task.Run
var t1 = Task.Factory.StartNew(() => Console.WriteLine("Task Created!")); Console.WriteLine(t1.Status); //有返回值 //定义 Task<TResult> StartNew<TResult>(Func<TResult> function); var task = Task.Factory.StartNew<string>(() => "Task Created!"); Console.WriteLine(task.Result); Console.WriteLine(t1.Status); Console.WriteLine(t1.Status); var task = new Task<string>(() => "Task Created!"); Console.WriteLine(task.Status); task.Start();//异步执行 Console.WriteLine(task.Status); Console.WriteLine(task.Result); Console.WriteLine(task.Status); var task = new Task<string>(() => "Task Created!"); task.RunSynchronously();//同步执行 Console.WriteLine(task.Result); var task = Task.Factory.StartNew(state => "hello " + state, "Mike"); Console.WriteLine(task.AsyncState); Console.WriteLine(task.Result); var tasks = new Task[3]; for (int i = 0; i < tasks.Length; i++) { int taskIndex = i; tasks[i] = Task.Factory.StartNew(() => { int seed = Guid.NewGuid().GetHashCode(); int waitTime = new Random(seed).Next(10, 100); Thread.Sleep(waitTime); Console.WriteLine("Task{0} Finished", taskIndex); }); } Task.WaitAny(tasks);//等待某一个任务完成 Console.WriteLine("已有任务完成");
static void GetUrlLength(string result) { Console.WriteLine("现在时间为:"+DateTime.Now.Ticks + ",长度为:" + result.Length); } static void AccessUrlForNet5Async() { var client = new WebClient(); //原型为 Task<string> DownloadStringTaskAsync(string address); var w1 = client.DownloadStringTaskAsync("http://msdn.microsoft.com/zh-tw").GetAwaiter(); w1.OnCompleted(() => { GetUrlLength(w1.GetResult()); }); //GetUrlLength(await client.DownloadStringTaskAsync("http://msdn.microsoft.com/")); }
var client = new WebClient(); var t1 = client.DownloadStringTaskAsync("http://msdn.microsoft.com/zh-tw"); t1.ContinueWith(t => { GetUrlLength(t1.Result); });
Task<int> task = Task.Run(() =>Enumerable.Range(1,500000).Count(n=>(n%3)==0)); Console.WriteLine("500000以内 能整除3的个数有:" + task.Result);//task未完成时,查询Result会封锁当前线程
public static void Main() { Task<Double>[] taskArray = { Task<Double>.Factory.StartNew(() => DoComputation(1.0)), Task<Double>.Factory.StartNew(() => DoComputation(100.0)), Task<Double>.Factory.StartNew(() => DoComputation(1000.0)) }; var results = new Double[taskArray.Length]; Double sum = 0; for (int i = 0; i < taskArray.Length; i++) { results[i] = taskArray[i].Result; Console.Write("{0:N1} {1}", results[i], i == taskArray.Length - 1 ? "= " : "+ "); sum += results[i]; } Console.WriteLine("{0:N1}", sum); } private static Double DoComputation(Double start) { Double sum = 0; for (var value = start; value <= start + 10; value += .1) sum += value; return sum; }