首页 > 编程语言 > 详细

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

时间:2016-06-28 15:48:31      阅读:119      评论:0      收藏:0      [点我收藏+]

方式一: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异步线程获取返回值的两种方式

原文:http://www.cnblogs.com/mc67/p/5623698.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!