码迷,mamicode.com
首页 > 编程语言 > 详细

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

时间:2016-06-28 15:51:00      阅读:283      评论: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
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!