net异步线程获取返回值的两种方式

Posted 咕咚

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了net异步线程获取返回值的两种方式相关的知识,希望对你有一定的参考价值。

方式一:endInvoke

using System;
using System.Collections.Generic;
using System.Text;
using System.Threading;

namespace ConsoleApplication6
{
    //调用异步方法,并返回值:
    //方式一,采用轮训的方式;
    //申明一个委托;
    public delegate int del(int a,int b);
    class Program
    {
        private static int add(int i, int j)
        {
            Console.WriteLine("starting task....");
            Thread.Sleep(2000);
            int result = i + j;
            return result;

        }
        static void Main(string[] args)
        {
            del d = new del(add);
            IAsyncResult re = d.BeginInvoke(10,12,null,null);
            while (!re.IsCompleted)
            {
                Console.WriteLine("异步线程进行中....");
            }
            int result = d.EndInvoke(re);
            Console.WriteLine("result:"+result);
            Console.ReadLine();

        }
    }
}

方式二:回调函数

using System;
using System.Collections.Generic;
using System.Text;
using System.Threading;

namespace ConsoleApplication6
{
    
   
    class Program
    {
        public delegate int del(int a,int b);
        static del d;
        static double result = 0; //使用全局的变量

        private static int add(int i, int j)
        {
            Console.WriteLine("starting task....");
            Thread.Sleep(2000);
            int result = i + j;
            return result;

        }
        private static void TaskFininshed(IAsyncResult ias)
        {
            result=d.EndInvoke(ias);
           
            Console.WriteLine("我来自异步线程...");
            Console.WriteLine("异步结束!输出结果");
            Console.WriteLine(result);
        }
        static void Main(string[] args)
        {
             d= new del(add);
            IAsyncResult re = d.BeginInvoke(10,12,new AsyncCallback(TaskFininshed),null);

            Console.WriteLine("我来自主线程...."); 
            Console.WriteLine("这个时候,主线中的代码,不会被堵塞....");

            Console.ReadLine();//异步线程 是属于 后台线程,所以这里要阻止前台线程结束
        }
    }
}

 

以上是关于net异步线程获取返回值的两种方式的主要内容,如果未能解决你的问题,请参考以下文章

Java开启异步的两种方式

Spring异步方法注解 @Async

创建线程有哪两种方法,它们各自的优缺点是啥?

Java 创建多线程的两种方式 异步执行

MyBatis学习笔记 —— MyBatis获取参数值的两种方式

spring boot返回Josn的两种方式