整理C#(同步调用、异步调用、异步回调)

王朝学院·作者佚名  2016-08-28
窄屏简体版  字體: 小  |  中  |  大  |  超大  

//闲来无事,巩固同步异步方面的知识,以备后用,特整理如下:

classPRogram

{

static void Main(string[] args)

{

//同步调用 会阻塞当前线程,一步一步进行调用

Console.WriteLine("============同步调用线程:" + Thread.CurrentThread.ManagedThreadId+"============");

AddHandler _handler01 = AddMethod.Add;

int _result01 = _handler01(1, 2);

Console.WriteLine("继续做别的事情。。。");

Console.WriteLine("同步调用结果:"+_result01);

Console.WriteLine();

//异步调用 不会阻塞当前线程,会放到线程池里

//异步调用通过BeginInvoke和EndInvoke来实现(成对应用)。

Console.WriteLine("============异步调用线程:" + Thread.CurrentThread.ManagedThreadId + "============");

AddHandler _handler02 = AddMethod.Add;

IAsyncResult _result02 = _handler02.BeginInvoke(3, 8, null, null);

Console.WriteLine("继续做别的事情。。。");

Console.WriteLine("异步调用结果:"+_handler02.EndInvoke(_result02));

Console.WriteLine();

//用回调函数,当调用结束时会自动调用回调函数,解决了为等待调用结果,而让线程依旧被阻塞的局面。

//BeginInvoke最后一个参数@object传递额外的参数

Console.WriteLine("============异步回调 线程:" + Thread.CurrentThread.ManagedThreadId + "============");

AddHandler _handler03 = AddMethod.Add;

IAsyncResult _result03 = null;

_result03 = _handler03.BeginInvoke(9, 8, (IAsyncResult _ia) => { Console.WriteLine("异步回调结果:"+_handler03.EndInvoke(_result03)); }, null);

Console.WriteLine("继续做别的事情。。。");

Console.ReadKey();

}

}

public delegate int AddHandler(int _a,int _b);

public class AddMethod

{

public static int Add(int _a, int _b)

{

Console.WriteLine("开始计算:" + _a + "+" + _b);

Thread.Sleep(3000);

Console.WriteLine("计算完成! 线程:"+Thread.CurrentThread.ManagedThreadId);

return _a + _b;

}

}

}

//运行结果,如图:

[flash=500,400]http://s1.knowsky.com/20160211/hs221clu4ay44.png[/flash]

整理自:http://blog.csdn.net/wanlong360599336/article/details/8781477

 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
 
© 2005- 王朝網路 版權所有 導航