知识大全 c#异步调用的几种方式

Posted

篇首语:一名具有高尚师德的教师,须是一个因材施教,公正公平对待每一名学生的教师。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 c#异步调用的几种方式相关的知识,希望对你有一定的参考价值。

  首先 我们分析一下异步处理的环境

  需要在当前线程中获取返回值

  不需要在当前线程中获取返回值 但是仍然需要对返回值做处理

  对于第 中情况 还可以继续细分

  在当前线程中启动线程T 然后继续执行当前线程中的其它任务 最后在当前线程中获取T的返回值

  在当前线程中启动线程T 然后继续执行当前线程中的其它任务R 等待T执行完成 当T执行完成后 继续执行当前线程中的其它任务R 最后获取T的返回值

  在当前线程中启动线程T 只要T在执行就执行任务R 最后获取T的返回值

  下面 我将一一给出例子

   在当前线程中启动线程T 然后继续执行当前线程中的其它任务 最后在当前线程中获取T的返回值

   using System;

   using System Collections Generic;

   using System Linq;

   using System Windows Forms;

   using System Threading;

   using System Runtime Remoting Messaging;

   namespace FirstWF

  

        static class Program

       

            /// <summary>

            /// The main entry point for the application

            /// </summary>

            [STAThread]

            static void Main()

           

                AsyncFuncDelegate caller = new AsyncFuncDelegate(Func);

                Console WriteLine( Input number please );

                IAsyncResult result = caller BeginInvoke(Convert ToInt (Console ReadLine()) null null);

                Console WriteLine( Implement other tasks );

                Thread Sleep( );

                Console WriteLine( Implement other tasks end );

                Console WriteLine( Get user s input );

                Console WriteLine(caller EndInvoke(result));

                Console ReadLine();

           

            delegate string AsyncFuncDelegate(int userInput);

            static string Func(int userInput)

           

                Console WriteLine( Func start to run );

                Console WriteLine( );

                Thread Sleep( );

                Console WriteLine( Func end to run );

                return userInput ToString();

           

       

  

  输出结果如下:

  Implement other tasks

  Func start to run

  

  Func end to run

  Implement other tasks end

  Get user s input

  

   在当前线程中启动线程T 然后继续执行当前线程中的其它任务R 等待T执行完成 当T执行完成后 继续执行当前线程中的其它任务R 最后获取T的返回值

   static void Main()

           

                AsyncFuncDelegate caller = new AsyncFuncDelegate(Func);

                Console WriteLine( Input number please );

                IAsyncResult result = caller BeginInvoke(Convert ToInt (Console ReadLine()) null null);

                Console WriteLine( Implement task );

                result AsyncWaitHandle WaitOne();

                result AsyncWaitHandle Close();

                Console WriteLine( Implment task );

                Console WriteLine( Get user s input );

                Console WriteLine(caller EndInvoke(result));

                Console ReadLine();

           

  输出结果如下:

  Input number please

  

  Implement task

  Func start to run

  

  Func end to run

  Implment task

  Get user s input

  

   在当前线程中启动线程T 只要T在执行就执行任务R 最后获取T的返回值

   [STAThread]

            static void Main()

           

                AsyncFuncDelegate caller = new AsyncFuncDelegate(Func);

                Console WriteLine( Input number please );

                IAsyncResult result = caller BeginInvoke(Convert ToInt (Console ReadLine()) null null);

                while (!result IsCompleted)

               

                    Thread Sleep( );

                    Console Write( > );

               

                Console WriteLine( );

                Console WriteLine( Implement other task );

                Console WriteLine( Get user s input );

                Console WriteLine(caller EndInvoke(result));

                Console ReadLine();

           

  输出结果如下:

  Func start to run

  

  >>>>>Func end to run

  >

  Implement other task

  Get user s input

  

   不需要在当前线程中获取返回值 但是仍然需要对返回值做处理

   using System;

   using System Collections Generic;

   using System Linq;

   using System Windows Forms;

   using System Threading;

   using System Runtime Remoting Messaging;

   namespace FirstWF

  

        static class Program

       

            /// <summary>

            /// The main entry point for the application

            /// </summary>

            [STAThread]

            static void Main()

           

                AsyncFuncDelegate caller = new AsyncFuncDelegate(Func);

                Console WriteLine( Input number please );

                caller BeginInvoke(Convert ToInt (Console ReadLine()) new AsyncCallback(CallBackFunc) Message from Main thread );

                Console WriteLine( Main thread ends );

                Console ReadLine();

           

            delegate string AsyncFuncDelegate(int userInput);

            static string Func(int userInput)

           

                Console WriteLine( Func start to run );

                Console WriteLine( );

                Thread Sleep( );

                Console WriteLine( Func end to run );

                return userInput ToString();

           

            static void CallBackFunc(IAsyncResult ar)

           

                AsyncResult result = ar as AsyncResult;

                string inputMessage = result AsyncState as string;

                AsyncFuncDelegate caller = result AsyncDelegate as AsyncFuncDelegate;

                Console WriteLine( call back starts );

                Console WriteLine(inputMessage);

                Console WriteLine( The input number is : + caller EndInvoke(ar));

                Console WriteLine( call back ends );

           

       

  

  输出结果如下:

  Input number please

  

  Main thread ends

  Func start to run

  

  Func end to run

  call back starts

  Message from Main thread

  The input number is :

cha138/Article/program/net/201311/13035

相关参考

知识大全 C#委托的同步调用和异步调用

C#委托的同步调用和异步调用  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  对于C#委托我们谈的

知识大全 Matlab与C#连接的几种方式比较

Matlab与C#连接的几种方式比较  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  使用环境Vi

知识大全 C# 启动外部程序的几种方法

C#启动外部程序的几种方法  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  启动外部程序不等待其退

知识大全 C#中路径的几种获取方法及其区别

C#中路径的几种获取方法及其区别  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  stringst

知识大全 C#编程中的 New 关键词的几种用法

C#编程中的New关键词的几种用法  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! &nb

知识大全 C#编程中的 New 关键词的几种用法[1]

C#编程中的New关键词的几种用法[1]  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  前段时间

知识大全 C#编程中的 New 关键词的几种用法[3]

C#编程中的New关键词的几种用法[3]  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!newpub

知识大全 C#编程中的 New 关键词的几种用法[2]

C#编程中的New关键词的几种用法[2]  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  以下是引

知识大全 c#中分割字符串的几种方法

  最近经常看到论坛中许多帖子询问如何使用split来分割字符串我这里对split做一些简单的总结希望能够对大家有所帮助下面介绍几种方法  第一种方法打开新建一个控制台项目然后在Main()方法下输入

知识大全 关于webservice的异步调用实例

  关于webservice的异步调用简单实例无论在任何情况下被调用方的代码无论是被异步调用还是同步调用的情况下被调用方的代码都是一样的  下面我们就以异步调用一个webservice为例作说明这是一