标签:任务 src png 编程 输出 component return loaded img
Task是.NET4.5加入的,跟线程池ThreadPool的功能类似,用Task开启新任务时,会从线程池中调用线程,而Thread每次实例化都会创建一个新的线程。
长耗时操作是不是常用 await Task.Run( )?
看下面代码:
namespace WpfApplication6 { /// <summary> /// MainWindow.xaml 的交互逻辑 /// </summary> public partial class MainWindow : Window { public MainWindow() { InitializeComponent(); ConsoleManager.Show();//打开控制台窗口 } private void Window_Loaded(object sender, RoutedEventArgs e) { Console.WriteLine("主线程启动"); Task task = Task.Run(() => { Thread.Sleep(1500); Console.WriteLine("task启动"); }); Thread.Sleep(300); task.Wait(); Console.WriteLine("主线程结束"); } } }
结果:
分析:
开启新任务的方法:Task.Run()或者Task.Factory.StartNew(),开启的是后台线程
要在主线程中等待后台线程执行完毕,可以使用Wait方法(会以同步的方式来执行)。不用Wait则会以异步的方式来执行。
thread和Task的区别,thread new多少个就会创建多少个线程,而task是利用线程池中的线程。
task<TResult>就是有返回值的Task,TResult就是返回值类型。示例:
private void Window_Loaded(object sender, RoutedEventArgs e) { Console.WriteLine("主线程开始"); //返回值类型为string Task<string> task = Task<string>.Run(() => { Thread.Sleep(2000); return Thread.CurrentThread.ManagedThreadId.ToString(); }); //会等到task执行完毕才会输出; Console.WriteLine(task.Result); Console.WriteLine("主线程结束"); }
通过task.Result可以取到返回值,若取值的时候,后台线程还没执行完,则会等待其执行完毕!
简单提一下:
Task任务可以通过CancellationTokenSource类来取消。
标签:任务 src png 编程 输出 component return loaded img
原文地址:http://www.cnblogs.com/xietianjiao/p/7429742.html