定义一个异步线程类:

  public class AsyEventClass
{
private static ILog logger = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
//异步线程,委托
public delegate string AsyncEventHandler(long num1, long num2);
public string ToDealData(long num1, long num2)
{
logger.Error("异步处理数据开始:num1:" + mainDigitalId + ",num2:");
//处理数据或其他操作return "异步成功,num1:" + mainDigitalId + ",num2:" + bindDigitalId;
} public void Callback(IAsyncResult result)
{
AsyncEventHandler handler = (AsyncEventHandler)((AsyncResult)result).AsyncDelegate;
logger.Error(handler.EndInvoke(result));
}
}

第一 同步调用

public class Program
{
static void Main()
{
Console.WriteLine("===== 同步调用,阻塞当前线程 =====");
AsyEventClass ac = new AsyEventClass();
AsyEventClass.AsyncEventHandler asy = new AsyEventClass.AsyncEventHandler(ac.ToDealData);
string result = asy.Invoke(num1,num2);
Console.WriteLine("此处会等上一步执行完再执行");
Console.WriteLine(result);
} }

第二  异步调用

public class Program
{
static void Main()
{
Console.WriteLine("=====异步调用,不会阻塞 ,但EndInvoke会因等待结果而阻塞====");
AsyEventClass ac = new AsyEventClass();
AsyEventClass.AsyncEventHandler asy = new AsyEventClass.AsyncEventHandler(ac.ToDealData);
IAsyncResult result = asy.BeginInvoke(num1,num2,null,null);
Console.WriteLine("此处不受影响,继续执行");
Console.WriteLine(asy.EndInvoke(result));// 如果异步处理时间过长,此处会阻塞线程,知道等到结果
} }

第三  异步回调

public class Program
{
static void Main()
{
Console.WriteLine("=====异步回调,不会阻塞,自动回调 ====");
AsyEventClass ac = new AsyEventClass();
AsyEventClass.AsyncEventHandler asy = new AsyEventClass.AsyncEventHandler(ac.ToDealData);
IAsyncResult result=asy.BeginInvoke(num1, num2, new AsyncCallback(ac.Callback), asy);//处理完自动回调callback方法,不会造成线程阻塞
Console.WriteLine("此处不受影响,继续执行");
} }

c#异步线程:同步调用,异步调用,异步回调的更多相关文章

  1. .net多线程,线程异步,线程同步,并发问题---1---ShinePans

    申请线程,输出线程状态: using System; using System.Collections.Generic; using System.Linq; using System.Text; u ...

  2. js中的异步与同步,解决由异步引起的问题

    之前在项目中遇到过好多次因为异步引起的变量没有值,所以意识到了认识js中同步与异步机制的重要性 在单线程的js中,异步代码会被放入一个事件队列,等到所有其他代码执行后再执行,而不会阻塞线程. 下面是j ...

  3. C#中的异步和同步

    同步 同步(英语:Synchronization [ˌsɪŋkrənaɪ'zeɪʃn]),指对在一个系统中所发生的事件(event)之间进行协调,在时间上出现一致性与统一化的现象.说白了就是多个任务一 ...

  4. ajax中的async属性值之同步和异步及同步和异步区别

    jquery中ajax方法有个属性async用于控制同步和异步,默认是true,即ajax请求默认是异步请求,有时项目中会用到AJAX同步.这个同步的意思是当JS代码加载到当前AJAX的时候会把页面里 ...

  5. Erlang运行时中的无锁队列及其在异步线程中的应用

    本文首先介绍 Erlang 运行时中需要使用无锁队列的场合,然后介绍无锁队列的基本原理及会遇到的问题,接下来介绍 Erlang 运行时中如何通过“线程进度”机制解决无锁队列的问题,并介绍 Erlang ...

  6. springboot 中如何正确在异步线程中使用request

    起因: 有后端同事反馈在异步线程中获取了request中的参数,然后下一个请求是get请求的话,发现会偶尔出现参数丢失的问题. 示例代码: @GetMapping("/getParams&q ...

  7. 千万不要把Request传递到异步线程里面!有坑!

    你好哇,我是歪歪. 前几天在网上冲浪的时候看到一篇技术文章,讲的是他把一个 request 请求传递到了线程池里面,然后遇到了一个匪夷所思的情况. 他写了这篇文章,把自己针对这个问题的探索过程分享了出 ...

  8. C#线程学习笔记六:线程同步--信号量和互斥体

    本笔记摘抄自:https://www.cnblogs.com/zhili/archive/2012/07/23/Mutex_And_Semaphore.html,记录一下学习过程以备后续查用.     ...

  9. 卸载AppDomain动态调用DLL异步线程执行失败

    应用场景 动态调用DLL中的类,执行类的方法实现业务插件功能 使用Assembly 来实现 但是会出现逻辑线程数异常的问题 使用AppDomain 实现动态调用,并卸载. 发现问题某个插件中开启异步线 ...

随机推荐

  1. 记一下STL的一个题

    A. Diversity time limit per test 1 second memory limit per test 256 megabytes input standard input o ...

  2. C#如何在keydown事件里判断按下的是左shift还是右shift

    public partial class Form1 : Form { [System.Runtime.InteropServices.DllImport("user32.dll" ...

  3. PHP面向对象练习2

    思路:构造函数完成数据库连接,增删改一个方法,查询一条记录一个方法,查询多条一个方法,sql执行失败则返回提示,并交出sql语句方便查错 代码: <?class dbcontroll{ priv ...

  4. [blockchain-035]eos的部署安装智能合约

    0.参考资料 https://github.com/EOSIO/eos/wiki 1. eos的github地址 https://github.com/EOSIO/eos 2.下载eos源码 git ...

  5. 刷题总结——Throw nails(hdu4393)

    题目: Problem Description The annual school bicycle contest started. ZL is a student in this school. H ...

  6. 【马克-to-win】—— 学习笔记

    声明 以下学习内容转载自:http://www.mark-to-win.com/ 社区,由马克java社区创始人---"马克-to-win"一人全部独立写作,创作和制作. 非常感谢 ...

  7. mysql插入表情问题

    http://blog.csdn.net/wxc20062006/article/details/19547179http://blog.csdn.net/xb12369/article/detail ...

  8. 判断pc还是手机打开跳转到别的网页

    function is_mobile() { var regex_match = /(nokia|iphone|android|motorola|^mot-|softbank|foma|docomo| ...

  9. shell面试经典70例

    转载自:http://www.imooc.com/article/1131 1) 如何向脚本传递参数 ? ./script argument 例子: 显示文件名称脚本 ./show.sh file1. ...

  10. HDU5187 zhx's contest

    Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others) Total Submission ...