Task类使用总结
来源:互联网 发布:php 替换字符串 某一段 编辑:程序博客网 时间:2024/06/05 16:27
原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 、作者信息和本声明。否则将追究法律责任。http://cnn237111.blog.51cto.com/2359144/1102476
- Task(Action)
- Task<TResult>(Func<TResult>)
- static void Main(string[] args)
- {
- Task Task1 = new Task(() => Console.WriteLine("Task1"));
- Task1.Start();
- Console.ReadLine();
- }
- static void Main(string[] args)
- {
- Task Task1=Task.Run(() => { Thread.Sleep(5000);
- Console.WriteLine("Foo");
- Thread.Sleep(5000);
- });
- Console.WriteLine(Task1.IsCompleted);
- Task1.Wait();//阻塞当前线程
- Console.WriteLine(Task1.IsCompleted);
- }
- static void Main(string[] args)
- {
- Task Task1=Task.Run(() => { Thread.Sleep(5000);
- Console.WriteLine("Foo");
- Thread.Sleep(5000);
- });
- Console.WriteLine("Task1.IsCompleted:{0}",Task1.IsCompleted);
- bool b=Task1.Wait(2000);
- Console.WriteLine("Task1.IsCompleted:{0}", Task1.IsCompleted);
- Console.WriteLine(b);
- Thread.Sleep(9000);
- Console.WriteLine("Task1.IsCompleted:{0}", Task1.IsCompleted);
- }
- static void Main(string[] args)
- {
- Task<int> Task1 = Task.Run<int>(() => { Thread.Sleep(5000); return Enumerable.Range(1, 100).Sum(); });
- Console.WriteLine("Task1.IsCompleted:{0}",Task1.IsCompleted);
- Console.WriteLine("Task1.IsCompleted:{0}", Task1.Result);//如果方法未完成,则会等待直到计算完成,得到返回值才运行下去。
- Console.WriteLine("Task1.IsCompleted:{0}", Task1.IsCompleted);
- }
- static void Main(string[] args)
- {
- try
- {
- Task<int> Task1 = Task.Run<int>(() => { throw new Exception("xxxxxx"); return 1; });
- Task1.Wait();
- }
- catch (Exception ex)//error的类型为System.AggregateException
- {
- Console.WriteLine(ex.StackTrace);
- Console.WriteLine("-----------------");
- Console.WriteLine(ex.InnerException.StackTrace);
- }
- }
- static void Main(string[] args)
- {
- TaskScheduler.UnobservedTaskException += UnobservedTaskException;
- Task.Run<int>(() => { throw new Exception("xxxxxx"); return 1; });
- Thread.Sleep(1000);
- }
- static void UnobservedTaskException(object sender, UnobservedTaskExceptionEventArgs e)
- {
- Console.WriteLine(e.Exception.Message);
- Console.WriteLine(e.Exception.InnerException.Message);
- }
- static void Main(string[] args)
- {
- TaskScheduler.UnobservedTaskException += UnobservedTaskException;
- Task.Run<int>(() => { throw new Exception("xxxxxx"); return 1; });
- Thread.Sleep(1000);
- GC.Collect();
- GC.WaitForPendingFinalizers();
- }
- static void Main(string[] args)
- {
- Task<int> Task1 = Task.Run<int>(() => { return Enumerable.Range(1, 100).Sum(); });
- var awaiter = Task1.GetAwaiter();
- awaiter.OnCompleted(() =>
- {
- Console.WriteLine("Task1 finished");
- int result = awaiter.GetResult();
- Console.WriteLine(result); // Writes result
- });
- Thread.Sleep(1000);
- }
- static void Main(string[] args)
- {
- Task<int> Task1 = Task.Run<int>(() => {return Enumerable.Range(1, 100).Sum(); });
- Task1.ContinueWith(antecedent => {
- Console.WriteLine(antecedent.Result);
- Console.WriteLine("Runing Continue Task");
- });
- Thread.Sleep(1000);
- }
- public class TaskCompletionSource<TResult>
- {
- public void SetResult (TResult result);
- public void SetException (Exception exception);
- public void SetCanceled();
- public bool TrySetResult (TResult result);
- public bool TrySetException (Exception exception);
- public bool TrySetCanceled();
- ...
- }
- static void Main(string[] args)
- {
- var tcs = new TaskCompletionSource<int>();
- new Thread(() => {
- Thread.Sleep(5000);
- int i = Enumerable.Range(1, 100).Sum();
- tcs.SetResult(i); }).Start();//线程把运行计算结果,设为tcs的Result。
- Task<int> task = tcs.Task;
- Console.WriteLine(task.Result); //此处会阻塞,直到匿名线程调用tcs.SetResult(i)完毕
- }
- Task<TResult> Run<TResult>(Func<TResult> function)
- {
- var tcs = new TaskCompletionSource<TResult>();
- Thread t = new Thread(() =>
- {
- try { tcs.SetResult(function()); }
- catch (Exception ex) { tcs.SetException(ex); }
- });
- t.IsBackground = true;
- t.Start();//启动线程
- return tcs.Task;
- }
- Task<int> task = Run(() => { Thread.Sleep(5000); return Enumerable.Range(1, 100).Sum(); });
- Console.Write(task.Result);//这句会阻塞当前线程,直到task的result值被赋值才行。
- static Task<int> delayFunc()
- {
- var tcs = new TaskCompletionSource<int>();
- var timer = new System.Timers.Timer(5000) { AutoReset = false };
- timer.Elapsed += (sender, e) => {
- timer.Dispose();
- int i = Enumerable.Range(1, 100).Sum();
- tcs.SetResult(i);
- };
- timer.Start();
- return tcs.Task;
- }
- var task = delayFunc();
- Console.Write(task.Result);
- Task.Delay (5000).GetAwaiter().OnCompleted (() => Console.WriteLine (42));
- 或者:
- Task.Delay (5000).ContinueWith (ant => Console.WriteLine (42));
阅读全文
0 0
- Task类使用总结
- 使用Task类获取返回值
- task and backtask总结
- arcgis task总结
- activity的task总结
- Task类
- Task类
- task的使用
- C# TASK 使用实例
- Task Scheduler 使用
- C# Task的使用
- Task的使用
- Verilog中task使用
- Gradle Task的使用
- flowable-task使用
- Spring task基本使用
- Gradle task简单使用
- JavaFX中javafx.concurrent.Task类的使用
- Bootstrap3.0学习第三轮(栅格系统案例)
- struts入门案例 登录
- 操作系统------进程间通信
- 最新Linux(CentOS5.5)搭建GFS系统--iSCSI+GFS实现网络存储
- iptables学习笔记
- Task类使用总结
- 获取微信公众号授权失败, 请稍后重试! 公众平台返回原始数据为: 错误代码-40164
- idea 自动生成 serialVersionUID
- 文件流---获取图片的宽、高、大小
- 利用pylot进行性能测试
- H5 <audio> 音频标签自定义样式修改以及添加播放控制事件
- html杂七杂八
- FlowNet2.0:Evolution of Optical Flow Estimation with Deep Networks
- js截取字符串第一个和最后一个字符