当前位置: 首页 > news >正文

建设银行行号查询网站网站分页符怎么做

建设银行行号查询网站,网站分页符怎么做,网站服务器租用价格多少钱一年,携程网站用js怎么做1、Task产生背景 Task出现之前#xff0c;微软的多线程处理方式有#xff1a;Thread→ThreadPool→委托的异步调用#xff0c;虽然也可以基本业务需要的多线程场景#xff0c;但它们在多个线程的等待处理方面、资源占用方面、线程延续和阻塞方面、线程的取消方面等都显得比…1、Task产生背景 Task出现之前微软的多线程处理方式有Thread→ThreadPool→委托的异步调用虽然也可以基本业务需要的多线程场景但它们在多个线程的等待处理方面、资源占用方面、线程延续和阻塞方面、线程的取消方面等都显得比较笨拙在面对复杂的业务场景下显得有点捉襟见肘了。 ThreadPool相比Thread来说具备了很多优势但是ThreadPool却又存在一些使用上的不方便。比如 ThreadPool不支持线程的取消、完成、失败通知等交互性操作ThreadPool不支持线程执行的先后次序 正是在这种背景下Task应运而生。Task是微软在.Net 4.0时代推出来的也是微软极力推荐的一种多线程的处理方式Task看起来像一个Thread实际上它是在ThreadPool的基础上进行的封装Task的控制和扩展性很强在线程的延续、阻塞、取消、超时等方面远胜于Thread和ThreadPool。以下是一个简单的任务示例 static void Main(string[] args) {Task t new Task(() {Console.WriteLine(任务开始工作……);Thread.Sleep(5000); //模拟工作过程});t.Start();t.ContinueWith(task {Console.WriteLine(任务完成完成时候的状态为);Console.WriteLine(IsCanceled{0}\tIsCompleted{1}\tIsFaulted{2}, task.IsCanceled, task.IsCompleted, task.IsFaulted);});Console.ReadKey(); } 2、Task使用方法  2.1 创建和启动任务 2.1.1 无返回值的方式 方式1:调用Start方法 var t1 new Task(() TaskMethod(Task 1)); t1.Start(); Task.WaitAll(t1);//等待所有任务结束 任务的状态Start之前为Created之后为WaitingToRun  方式2:静态方法Run Task.Run(() TaskMethod(Task 2)); 方式3:TaskFactory工厂 // 方法1. TaskFactory工厂 TaskFactory taskFactory new TaskFactory() ; taskFactory.StartNew(() TaskMethod(Task 3)); // 方法2. Task.Factory属性 Task.Factory.StartNew(() TaskMethod(Task 3)); //或者 var t3Task.Factory.StartNew(() TaskMethod(Task 3)); Task.WaitAll(t3); 任务的状态Start之前为Running之后为Running static void Main(string[] args) {var t1 new Task(() TaskMethod(Task 1));var t2 new Task(() TaskMethod(Task 2));t2.Start();t1.Start();Task.WaitAll(t1, t2);Task.Run(() TaskMethod(Task 3));Task.Factory.StartNew(() TaskMethod(Task 4));//标记为长时间运行任务,则任务不会使用线程池,而在单独的线程中运行。Task.Factory.StartNew(() TaskMethod(Task 5), TaskCreationOptions.LongRunning);#region 常规的使用方式Console.WriteLine(主线程执行业务处理.);//创建任务Task task new Task(() {Console.WriteLine(使用System.Threading.Tasks.Task执行异步操作.);for (int i 0; i 10; i){Console.WriteLine(i);}});//启动任务,并安排到当前任务队列线程中执行任务(System.Threading.Tasks.TaskScheduler)task.Start();Console.WriteLine(主线程执行其他处理);task.Wait();#endregionThread.Sleep(TimeSpan.FromSeconds(1));Console.ReadLine(); }static void TaskMethod(string name) {Console.WriteLine(Task {0} is running on a thread id {1}. Is thread pool thread: {2},name, Thread.CurrentThread.ManagedThreadId, Thread.CurrentThread.IsThreadPoolThread); } 方式4:RunSynchronously同步启动 Task实例化后调用同步方法RunSynchronously进行线程启动。(PS: 类似委托开启线程BeginInvoke是异步而Invoke是同步) var task new Task(() TaskMethod(Task 1)); task.RunSynchronously(); async/await的实现方式 using System; using System.Threading; using System.Threading.Tasks;namespace ConsoleApp1 {class Program{async static void AsyncFunction(){await Task.Delay(1);Console.WriteLine(使用System.Threading.Tasks.Task执行异步操作.);for (int i 0; i 10; i){Console.WriteLine(string.Format(AsyncFunction:i{0}, i));}}public static void Main(){Console.WriteLine(主线程执行业务处理.);AsyncFunction();Console.WriteLine(主线程执行其他处理);for (int i 0; i 10; i){Console.WriteLine(string.Format(Main:i{0}, i));}Console.ReadLine();}} } 2.1.2 带返回值的方式 方式4: Taskint task CreateTask(Task 1); task.Start(); int result task.Result; using System; using System.Threading; using System.Threading.Tasks;namespace ConsoleApp1 {class Program{static Taskint CreateTask(string name){return new Taskint(() TaskMethod(name));}static void Main(string[] args){TaskMethod(Main Thread Task);Taskint task CreateTask(Task 1);task.Start();int result task.Result;Console.WriteLine(Task 1 Result is: {0}, result);task CreateTask(Task 2); task.RunSynchronously(); //该任务会运行在主线程中result task.Result;Console.WriteLine(Task 2 Result is: {0}, result);task CreateTask(Task 3);Console.WriteLine(task.Status);task.Start();while (!task.IsCompleted){Console.WriteLine(task.Status);Thread.Sleep(TimeSpan.FromSeconds(0.5));}Console.WriteLine(task.Status);result task.Result;Console.WriteLine(Task 3 Result is: {0}, result);#region 常规使用方式//创建任务Taskint getsumtask new Taskint(() Getsum());//启动任务,并安排到当前任务队列线程中执行任务(System.Threading.Tasks.TaskScheduler)getsumtask.Start();Console.WriteLine(主线程执行其他处理);getsumtask.Wait(); //等待任务的完成执行过程Console.WriteLine(任务执行结果{0}, getsumtask.Result.ToString());//获得任务的执行结果#endregion}static int TaskMethod(string name){Console.WriteLine(Task {0} is running on a thread id {1}. Is thread pool thread: {2},name, Thread.CurrentThread.ManagedThreadId, Thread.CurrentThread.IsThreadPoolThread);Thread.Sleep(TimeSpan.FromSeconds(2));return 42;}static int Getsum(){int sum 0;Console.WriteLine(使用Task执行异步操作.);for (int i 0; i 100; i){sum i;}return sum;}} } using System; using System.Threading.Tasks;namespace ConsoleApp1 {class Program{public static void Main(){var ret1 AsyncGetsum();Console.WriteLine(主线程执行其他处理);for (int i 1; i 3; i)Console.WriteLine(Call Main());int result ret1.Result; //阻塞主线程Console.WriteLine(任务执行结果{0}, result);}async static Taskint AsyncGetsum(){await Task.Delay(1);int sum 0;Console.WriteLine(使用Task执行异步操作.);for (int i 0; i 100; i){sum i;}return sum;}} } 2.2 线程等待、延续和组合 2.2.1 Task的线程等待和延续主要以下几类 Wait针对单个Task的实例可以task1.wait进行线程等待WaitAny线程列表中任何一个线程执行完毕即可执行阻塞主线程WaitAll线程列表中所有线程执行完毕方可执行阻塞主线程WhenAny与ContinueWith配合,线程列表中任何一个执行完毕则继续ContinueWith中的任务开启新线程不阻塞主线程WhenAll与ContinueWith配合,线程列表中所有线程执行完毕则继续ContinueWith中的任务开启新线程不阻塞主线程ContinueWith与WhenAny或WhenAll配合使用ContinueWhenAny等价于Task的WhenAnyContinueWithContinueWhenAll等价于Task的WhenAllContinueWith public static void Main() {//创建一个任务Taskint task new Taskint(() {int sum 0;Console.WriteLine(使用Task执行异步操作.);for (int i 0; i 100; i){sum i;}return sum;});//启动任务,并安排到当前任务队列线程中执行任务(System.Threading.Tasks.TaskScheduler)task.Start();Console.WriteLine(主线程执行其他处理);//任务完成时执行处理。Task cwt task.ContinueWith(t {Console.WriteLine(任务完成后的执行结果{0}, t.Result.ToString());});task.Wait();cwt.Wait();Actionstring,int log (name,time) {Console.WriteLine(${name}任务开始...);Thread.Sleep(time);Console.WriteLine(${name}任务结束!);};ListTask tasks new ListTask{Task.Run(() log(张三,3000)),Task.Run(() log(李四,1000)),Task.Run(() log(王五,2000))};//以下语句逐个测试效果Task.WaitAny(tasks.ToArray());Task.WaitAll(tasks.ToArray());Task.WhenAny(tasks.ToArray()).ContinueWith(x Console.WriteLine(某个Task执行完毕));Task.WhenAll(tasks.ToArray()).ContinueWith(x Console.WriteLine(所有Task执行完毕));Task.Factory.ContinueWhenAny(tasks.ToArray(), x Console.WriteLine(某个Task执行完毕));Task.Factory.ContinueWhenAll(tasks.ToArray(), x Console.WriteLine(所有Task执行完毕));Console.Read(); } 2.2.2 任务的串行 static void Main(string[] args) {ConcurrentStackint stack new ConcurrentStackint();//t1先串行var t1 Task.Factory.StartNew(() {stack.Push(1);stack.Push(2);});//t2,t3并行执行var t2 t1.ContinueWith(t {int result;stack.TryPop(out result);Console.WriteLine(Task t2 result{0},Thread id {1}, result, Thread.CurrentThread.ManagedThreadId);});//t2,t3并行执行var t3 t1.ContinueWith(t {int result;stack.TryPop(out result);Console.WriteLine(Task t3 result{0},Thread id {1}, result, Thread.CurrentThread.ManagedThreadId);});//等待t2和t3执行完Task.WaitAll(t2, t3);//t4串行执行var t4 Task.Factory.StartNew(() {Console.WriteLine(当前集合元素个数{0},Thread id {1}, stack.Count, Thread.CurrentThread.ManagedThreadId);});t4.Wait(); } 2.2.3 子任务 public static void Main() {Taskstring[] parent new Taskstring[](state {Console.WriteLine(state);string[] result new string[2];//创建并启动子任务new Task(() { result[0] 我是子任务1; }, TaskCreationOptions.AttachedToParent).Start();new Task(() { result[1] 我是子任务2; }, TaskCreationOptions.AttachedToParent).Start();return result;}, 我是父任务并在我的处理过程中创建多个子任务所有子任务完成以后我才会结束执行);//任务完成后执行parent.ContinueWith(t {Array.ForEach(t.Result, r Console.WriteLine(r));}); parent.Start(); //启动父任务parent.Wait();//等待任务结束Wait只能等待父线程结束,没办法等到父线程的ContinueWith结束Console.ReadLine(); } 2.2.4 动态并行 TaskCreationOptions.AttachedToParent父任务等待所有子任务完成后整个任务才算完成 class Node {public Node Left { get; set; }public Node Right { get; set; }public string Text { get; set; } }class Program {static Node GetNode(){Node root new Node{Left new Node{Left new Node{ Text L-L },Right new Node{ Text L-R },Text L},Right new Node{Left new Node{ Text R-L },Right new Node{ Text R-R },Text R},Text Root};return root;}static void Main(string[] args){Node root GetNode();DisplayTree(root);}static void DisplayTree(Node root){var task Task.Factory.StartNew(() DisplayNode(root),CancellationToken.None,TaskCreationOptions.None,TaskScheduler.Default);task.Wait();}static void DisplayNode(Node current){if (current.Left ! null)Task.Factory.StartNew(() DisplayNode(current.Left),CancellationToken.None,TaskCreationOptions.AttachedToParent,TaskScheduler.Default);if (current.Right ! null)Task.Factory.StartNew(() DisplayNode(current.Right),CancellationToken.None,TaskCreationOptions.AttachedToParent,TaskScheduler.Default);Console.WriteLine(当前节点的值为{0};处理的ThreadId{1}, current.Text, Thread.CurrentThread.ManagedThreadId);} } 2.3 取消任务 private static int TaskMethod(string name, int seconds, CancellationToken token) {Console.WriteLine(Task {0} 正在运行,当前线程id {1}. Is thread pool thread: {2},name, Thread.CurrentThread.ManagedThreadId, Thread.CurrentThread.IsThreadPoolThread);for (int i 0; i seconds; i){Thread.Sleep(TimeSpan.FromSeconds(1));if (token.IsCancellationRequested) return -1;}return 42 * seconds; }private static void Main(string[] args) {var cts new CancellationTokenSource();var longTask new Taskint(() TaskMethod(Task 1, 10, cts.Token), cts.Token);Console.WriteLine(longTask.Status);cts.Cancel();Console.WriteLine(longTask.Status);Console.WriteLine(第一个任务在执行前已被取消);cts new CancellationTokenSource();longTask new Taskint(() TaskMethod(Task 2, 10, cts.Token), cts.Token);longTask.Start();for (int i 0; i 5; i){Thread.Sleep(TimeSpan.FromSeconds(0.5));Console.WriteLine(longTask.Status);}cts.Cancel();for (int i 0; i 5; i){Thread.Sleep(TimeSpan.FromSeconds(0.5));Console.WriteLine(longTask.Status);}Console.WriteLine(任务已完成,结果为 {0}., longTask.Result); } 2.4 处理异常 2.4.1 单个任务 static int TaskMethod(string name, int seconds) {Console.WriteLine(Task {0} is running on a thread id {1}. Is thread pool thread: {2},name, Thread.CurrentThread.ManagedThreadId, Thread.CurrentThread.IsThreadPoolThread);Thread.Sleep(TimeSpan.FromSeconds(seconds));throw new Exception(Boom!);return 42 * seconds; }static void Main(string[] args) {try{Taskint task Task.Run(() TaskMethod(Task 2, 2));int result task.GetAwaiter().GetResult();Console.WriteLine(Result: {0}, result);}catch (Exception ex){Console.WriteLine(Task 2 Exception caught: {0}, ex.Message);}Console.WriteLine(----------------------------------------------);Console.ReadLine(); } 2.4.2 多个任务 static int TaskMethod(string name, int seconds) {Console.WriteLine(Task {0} is running on a thread id {1}. Is thread pool thread: {2},name, Thread.CurrentThread.ManagedThreadId, Thread.CurrentThread.IsThreadPoolThread);Thread.Sleep(TimeSpan.FromSeconds(seconds));throw new Exception(string.Format(Task {0} Boom!, name));return 42 * seconds; }public static void Main(string[] args) {try{var t1 new Taskint(() TaskMethod(Task 3, 3));var t2 new Taskint(() TaskMethod(Task 4, 2));var complexTask Task.WhenAll(t1, t2);var exceptionHandler complexTask.ContinueWith(t Console.WriteLine(Result: {0}, t.Result),TaskContinuationOptions.OnlyOnFaulted);t1.Start();t2.Start();Task.WaitAll(t1, t2);}catch (AggregateException ex){ex.Handle(exception {Console.WriteLine(exception.Message);return true;});} } 2.4.3 async/await的方式 class Program {static async Task ThrowNotImplementedExceptionAsync(){throw new NotImplementedException();}static async Task ThrowInvalidOperationExceptionAsync(){throw new InvalidOperationException();}static async Task Normal(){await Fun();}static Task Fun(){return Task.Run(() {for (int i 1; i 10; i){Console.WriteLine(i{0}, i);Thread.Sleep(200);}});}static async Task ObserveOneExceptionAsync(){var task1 ThrowNotImplementedExceptionAsync();var task2 ThrowInvalidOperationExceptionAsync();var task3 Normal();try{Task allTasks Task.WhenAll(task1, task2, task3); //异步的方式await allTasks;//Task.WaitAll(task1, task2, task3); //同步的方式}catch (NotImplementedException ex){Console.WriteLine(task1 任务报错!);}catch (InvalidOperationException ex){Console.WriteLine(task2 任务报错!);}catch (Exception ex){Console.WriteLine(任务报错!);}}public static void Main(){Task task ObserveOneExceptionAsync();Console.WriteLine(主线程继续运行........);task.Wait();} } 2.5 Task.FromResult 此方法创建一个TaskTResult对象该对象的TaskTResult.Result属性为result其Status属性为RanToCompletion。 当立即知道任务的返回值而不执行更长的代码路径时通常使用方法。 class Program {static IDictionarystring, string cache new Dictionarystring, string(){{0001,A}, {0002,B}, {0003,C},{0004,D}, {0005,E}, {0006,F}};public static void Main(){Taskstring task GetValueFromCache(0006);Console.WriteLine(主程序继续执行。。。。);string result task.Result;Console.WriteLine(result{0}, result);}private static Taskstring GetValueFromCache(string key){Console.WriteLine(GetValueFromCache开始执行。。。。);string result string.Empty;//Task.Delay(5000);Thread.Sleep(5000);Console.WriteLine(GetValueFromCache继续执行。。。。);if (cache.TryGetValue(key, out result)){return Task.FromResult(result);}return Task.FromResult();} } 2.6 Factory.FromAsync 简APM模式委托转换为任务BeginXXX和EndXXX 2.6.1 带回调方式的 class Program {private delegate string AsynchronousTask(string threadName);private static string Test(string threadName){Console.WriteLine(开始...);Console.WriteLine(线程池是线程吗: {0}, Thread.CurrentThread.IsThreadPoolThread);Thread.Sleep(TimeSpan.FromSeconds(2));Thread.CurrentThread.Name threadName;return string.Format(线程名称: {0}, Thread.CurrentThread.Name);}private static void Callback(IAsyncResult ar){Console.WriteLine(开始一个回调...);Console.WriteLine(传递给callbak的状态: {0}, ar.AsyncState);Console.WriteLine(线程池是线程吗: {0}, Thread.CurrentThread.IsThreadPoolThread);Console.WriteLine(线程池工作线程id: {0}, Thread.CurrentThread.ManagedThreadId);}//执行的流程是:先执行Test---Callback---task.ContinueWithstatic void Main(string[] args){AsynchronousTask d Test;Console.WriteLine(Option 1);Taskstring task Taskstring.Factory.FromAsync(d.BeginInvoke(AsyncTaskThread, Callback, 委托异步调用), d.EndInvoke);task.ContinueWith(t Console.WriteLine(完成回调, 现在继续! Result: {0}, t.Result));while (!task.IsCompleted){Console.WriteLine(task.Status);Thread.Sleep(TimeSpan.FromSeconds(0.5));}Console.WriteLine(task.Status);} } 2.6.2 不带回调方式的 class Program {private delegate string AsynchronousTask(string threadName);private static string Test(string threadName){Console.WriteLine(开始...);Console.WriteLine(线程池是线程吗: {0}, Thread.CurrentThread.IsThreadPoolThread);Thread.Sleep(TimeSpan.FromSeconds(2));Thread.CurrentThread.Name threadName;return string.Format(线程名称: {0}, Thread.CurrentThread.Name);}//执行的流程是:先执行Test---task.ContinueWithstatic void Main(string[] args){AsynchronousTask d Test;Taskstring task Taskstring.Factory.FromAsync(d.BeginInvoke, d.EndInvoke, AsyncTaskThread, 委托异步调用);task.ContinueWith(t Console.WriteLine(任务完成现在运行一个延续! Result: {0}, t.Result));while (!task.IsCompleted){Console.WriteLine(task.Status);Thread.Sleep(TimeSpan.FromSeconds(0.5));}Console.WriteLine(task.Status);} } 2.6.3 Task启动带参数和返回值的函数任务 方法1 private int MyTest(object i) {this.Invoke(new Action(() {pictureBox1.Visible true;}));System.Threading.Thread.Sleep(3000);MessageBox.Show(hello: i);this.Invoke(new Action(() {pictureBox1.Visible false;}));return 0; }private void Call() {//Funcstring, string funcOne delegate(string s){ return fff; };object i 55;var t Taskint.Factory.StartNew(new Funcobject, int(MyTest), i); } 方法2 private async Taskint MyTest(object i) {this.Invoke(new Action(() {pictureBox1.Visible true;}));HttpClient client new HttpClient();var a await client.GetAsync(http://www.baidu.com);Taskstring s a.Content.ReadAsStringAsync();MessageBox.Show (s.Result);this.Invoke(new Action(() {pictureBox1.Visible false;}));return 0; }async private void Call() {object i 55;var t TaskTaskint.Factory.StartNew(new Funcobject, Taskint(MyTest), i); } 方法3 private async void MyTest() {this.Invoke(new Action(() {pictureBox1.Visible true;}));HttpClient client new HttpClient();var a await client.GetAsync(http://www.baidu.com);Taskstring s a.Content.ReadAsStringAsync();MessageBox.Show (s.Result);this.Invoke(new Action(() {pictureBox1.Visible false;})); }private void Call() {var t Task.Run(new Action(MyTest));//相当于//Thread th new Thread(new ThreadStart(MyTest));//th.Start(); } 2.7 使用IProgress IProgressin T只提供了一个方法void Report(T value)通过Report方法把一个T类型的值报告给IProgress然后IProgressin T的实现类Progressin T的构造函数接收类型为ActionT的形参通过这个委托让进度显示在UI界面中。 class Program {static void DoProcessing(IProgressint progress){for (int i 0; i 100; i){Thread.Sleep(100);if (progress ! null){progress.Report(i);}}}static async Task Display(){//当前线程var progress new Progressint(percent {Console.Clear();Console.Write({0}%, percent);});//线程池线程await Task.Run(() DoProcessing(progress));Console.WriteLine();Console.WriteLine(结束);}public static void Main(){Task task Display();task.Wait();} }
http://www.dnsts.com.cn/news/83941.html

相关文章:

  • 网站快速盈利企业年金有必要交吗
  • 免费的源码网站有哪些东莞定制网页设计
  • 网站开发的私活广州网站优化排名哪家好
  • wordpress公司展示网站网站开发 有哪些优化功能
  • 建网站找哪家公司腾讯云 wordpress教程
  • 对象存储 做视频网站wordpress评论框制作
  • 网站开发需要投入多少时间做学分网站
  • 孔为民医生个人网站wordpress加入ai
  • 绘本借阅网站开发个人办公室装修效果图
  • 厦门网站建设2015凡科建网
  • 奥远科技网站建设流程免认证域名
  • 企业建站什么网站好一个网站内容怎么规划
  • 网站建设赚钱么阿里云投数亿资源扶持中小网站迁移服务器
  • 网络网站开发网站开发和维护费用
  • 中学生制作网站怎么做钢结构网站
  • 国外图片设计网站有哪些什么是网站国内高速空间
  • 手机摄影网站商城模板网站
  • 北京建网站品牌公司关于网站建设论文
  • 做字素的网站做视频网站需要什么样的配置
  • 营口网站建设公司个人直播网站怎么做
  • 安阳网站公司哪家好湘潭今天最新通知
  • 网站建设上机课网站域名中文后缀
  • 中小型网站建设精英室内设计效果图展板
  • 企业推广网站有哪些网站开发通用流程图
  • 网站建设公司名字福州市住房和城乡建设网站
  • 工程项目建设自学网站亚马逊跨境电商官网
  • 如何构成网站素材图
  • 著名的国外设计网站有哪些村网站建设计划书
  • 柳州团购网站建设wordpress 汉化失败
  • 正版电子书做的最好的网站柳州人社app下载