资源预览内容
第1页 / 共12页
第2页 / 共12页
第3页 / 共12页
第4页 / 共12页
第5页 / 共12页
第6页 / 共12页
第7页 / 共12页
第8页 / 共12页
第9页 / 共12页
第10页 / 共12页
亲,该文档总共12页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述
软件构架师总结出的经验-c#异步调用的几种方式-经典啊首先,我们分析一下异步处理的环境需要在当前线程中获取返回值不需要在当前线程中获取返回值,但是仍然需要对返回值做处理对于第1中情况,还可以继续细分在当前线程中启动线程T,然后继续执行当前线程中的其它任务,最后在当前线程中获取T的返回值在当前线程中启动线程T,然后继续执行当前线程中的其它任务R1,等待T执行完成,当T执行完成后,继续执行当前线程中的其它任务R2,最后获取T的返回值在当前线程中启动线程T,只要T在执行就执行任务R,最后获取T的返回值下面,我将一一给出例子:1.1 在当前线程中启动线程T,然后继续执行当前线程中的其它任务,最后在当前线程中获取T的返回值01 using System;02 using System.Collections.Generic;03 using System.Linq;04 using System.Windows.Forms;05 using System.Threading;06 using System.Runtime.Remoting.Messaging;07 namespace FirstWF08 09 static class Program10 11 / 12 / The main entry point for the application.13 / 14 STAThread15 static void Main()16 17 AsyncFuncDelegate caller = new AsyncFuncDelegate(Func);18 Console.WriteLine(Input number please.);19 IAsyncResult result = caller.BeginInvoke(Convert.ToInt32(Console.ReadLine(), null, null);20 Console.WriteLine(Implement other tasks);21 Thread.Sleep(7000);22 Console.WriteLine(Implement other tasks end .);23 Console.WriteLine(Get users input);24 Console.WriteLine(caller.EndInvoke(result);25 Console.ReadLine();26 27 delegate string AsyncFuncDelegate(int userInput);28 static string Func(int userInput)29 30 Console.WriteLine(Func start to run);31 Console.WriteLine(.);32 Thread.Sleep(5000);33 Console.WriteLine(Func end to run);34 return userInput.ToString();35 36 37 输出结果如下:Implement other tasksFunc start to run.Func end to runImplement other tasks end .Get users input561.2 在当前线程中启动线程T,然后继续执行当前线程中的其它任务R1,等待T执行完成,当T执行完成后,继续执行当前线程中的其它任务R2,最后获取T的返回值01 static void Main()02 03 AsyncFuncDelegate caller = new AsyncFuncDelegate(Func);04 Console.WriteLine(Input number please.);05 IAsyncResult result = caller.BeginInvoke(Convert.ToInt32(Console.ReadLine(), null, null);06 Console.WriteLine(Implement task 1);07 result.AsyncWaitHandle.WaitOne();08 result.AsyncWaitHandle.Close();09 Console.WriteLine(Implment task 2);10 Console.WriteLine(Get users input);11 Console.WriteLine(caller.EndInvoke(result);12 Console.ReadLine();13 输出结果如下:Input number please.25Implement task 1Func start to run.Func end to runImplment task 2Get users input251.3 在当前线程中启动线程T,只要T在执行就执行任务R,最后获取T的返回值01 STAThread02 static void Main()03 04 AsyncFuncDelegate caller = new AsyncFuncDelegate(Func);05 Console.WriteLine(Input number please.);06 IAsyncResult result = caller.BeginInvoke(Convert.ToInt32(Console.ReadLine(), null, null);07 while (!result.IsCompleted)08 09 Thread.Sleep(1000);10 Console.Write();11 12 Console.WriteLine();13 Console.WriteLine(Implement other task2);14 Console.WriteLine(Get users input);15 Console.WriteLine(caller.EndInvoke(result);16 Console.ReadLine();17 输出结果如下:Func start to run.Func end to runImplement other task2Get users input232 不需要在当前线程中获取返回值,但是仍然需要对返回值做处理 29191132001 using System;02 using System.Collections.Generic;03 using System.Linq;04 using System.Windows.Forms;05 using System.Threading;06 using System.Runtime.Remoting.Messaging;07 namespace FirstWF08 09 static class Program10 11 / 12 / The main entry point for the application.13 / 14 STAThread15 static void Main()16 17 AsyncFuncDelegate caller = new AsyncFuncDelegate(Func);18 Console.WriteLine(Input number please.);19 caller.BeginInvoke(Convert.ToInt32(Console.ReadLine(), new AsyncCallback(CallBackFunc), Message from Main thread.);20 Console.WriteLine(Main thread ends);21 Console.ReadLine();22 23 delegate string AsyncFuncDelegate(int userInput);
收藏 下载该资源
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号