当一个方法中有很多复杂的操作的时候就可以使用异步编程。
假如说这一个方法中有很多复杂的操作,把每一个复杂的操作放到一个异步方法中。
原来程序需要这些方法,上一个执行完成之后,才能执行下一个操作。
但是使用异步的方法,可以把这些复杂的操作给肢解了,把每一个复杂的操作都放到一个异步方法中,然后同时执行这些复杂的操作。
/// 在控制台中调用这个方法 static void TaskWait() { //创建一个异步任务 Task<int> task = new Task<int>(() => { int aa = 0; Console.WriteLine("异步方法中执行操作开始"); for (int i = 0; i < 1000; i++) { aa += i; } Console.WriteLine("异步方法中执行操作结束"); return aa; }); //启动 System.Threading.Tasks.Task,并将它安排到当前的 System.Threading.Tasks.TaskScheduler中执行。 task.Start(); Console.WriteLine("主线程执行其他处理1"); Console.WriteLine("主线程执行其他处理2"); Console.WriteLine("主线程执行其他处理3"); Console.WriteLine("主线程执行其他处理4"); Console.WriteLine("主线程执行其他处理5"); //等待任务的完成执行过程。 task.Wait(); //获得任务的执行结果 Console.WriteLine("任务执行结果---" + task.Result.ToString()); }
这样就可以把一些比较费时的操作拿出来,进行异步操作,就可以节省一部分时间。
当有多个很费时的操作的时候,并且下一个操作需要用到上一个操作返回结果的时候,可以使用下面的这种方式。
/// 在控制台中调用这个方法 static void TaskContinueWith() { //创建一个异步任务 Task<int> task = new Task<int>(() => { int aa = 0; Console.WriteLine("异步方法中执行操作开始"); for (int i = 0; i < 1000; i++) { aa += i; } Console.WriteLine("异步方法中执行操作结束"); return aa; }); //启动任务,并安排到当前任务队列线程中执行任务(System.Threading.Tasks.TaskScheduler) task.Start(); Console.WriteLine("主线程执行其他处理1"); Console.WriteLine("主线程执行其他处理2"); Console.WriteLine("主线程执行其他处理3"); Console.WriteLine("主线程执行其他处理4"); Console.WriteLine("主线程执行其他处理5"); //任务完成时执行处理。 Task<int> cwt = task.ContinueWith(t => { Console.WriteLine("第二个操作需要用到第一个操作的返回结果" + t.Result.ToString()); int aa = 0; Console.WriteLine("第二个---异步方法中执行操作开始"); for (int i = 0; i < 1000; i++) { aa += i; } Console.WriteLine("第二个---异步方法中执行操作结束"); return aa; }); //cwt.Start();//这里不需要再启动这个Task方法了 cwt.Wait(); Console.WriteLine("第二个---异步方法的返回结果---" + cwt.Result.ToString()); }