c#异步线程:同步调用,异步调用,异步回调
定义一个异步线程类:
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#异步线程:同步调用,异步调用,异步回调的更多相关文章
- .net多线程,线程异步,线程同步,并发问题---1---ShinePans
申请线程,输出线程状态: using System; using System.Collections.Generic; using System.Linq; using System.Text; u ...
- js中的异步与同步,解决由异步引起的问题
之前在项目中遇到过好多次因为异步引起的变量没有值,所以意识到了认识js中同步与异步机制的重要性 在单线程的js中,异步代码会被放入一个事件队列,等到所有其他代码执行后再执行,而不会阻塞线程. 下面是j ...
- C#中的异步和同步
同步 同步(英语:Synchronization [ˌsɪŋkrənaɪ'zeɪʃn]),指对在一个系统中所发生的事件(event)之间进行协调,在时间上出现一致性与统一化的现象.说白了就是多个任务一 ...
- ajax中的async属性值之同步和异步及同步和异步区别
jquery中ajax方法有个属性async用于控制同步和异步,默认是true,即ajax请求默认是异步请求,有时项目中会用到AJAX同步.这个同步的意思是当JS代码加载到当前AJAX的时候会把页面里 ...
- Erlang运行时中的无锁队列及其在异步线程中的应用
本文首先介绍 Erlang 运行时中需要使用无锁队列的场合,然后介绍无锁队列的基本原理及会遇到的问题,接下来介绍 Erlang 运行时中如何通过“线程进度”机制解决无锁队列的问题,并介绍 Erlang ...
- springboot 中如何正确在异步线程中使用request
起因: 有后端同事反馈在异步线程中获取了request中的参数,然后下一个请求是get请求的话,发现会偶尔出现参数丢失的问题. 示例代码: @GetMapping("/getParams&q ...
- 千万不要把Request传递到异步线程里面!有坑!
你好哇,我是歪歪. 前几天在网上冲浪的时候看到一篇技术文章,讲的是他把一个 request 请求传递到了线程池里面,然后遇到了一个匪夷所思的情况. 他写了这篇文章,把自己针对这个问题的探索过程分享了出 ...
- C#线程学习笔记六:线程同步--信号量和互斥体
本笔记摘抄自:https://www.cnblogs.com/zhili/archive/2012/07/23/Mutex_And_Semaphore.html,记录一下学习过程以备后续查用. ...
- 卸载AppDomain动态调用DLL异步线程执行失败
应用场景 动态调用DLL中的类,执行类的方法实现业务插件功能 使用Assembly 来实现 但是会出现逻辑线程数异常的问题 使用AppDomain 实现动态调用,并卸载. 发现问题某个插件中开启异步线 ...
随机推荐
- HDU 4472 Count (DP)
题目:问n个节点构成完全对称的树有多少种方法. 因为树是完全对称的,所以它的子树也是完全对称的. 对于每个树,拿出一个根节点,枚举剩下的节点能拆分成多少个子树. #include <cstdio ...
- Axios & Interceptors & Serialization & CORS & cookie
Axios https://github.com/axios/axios#config-defaults Global axios defaults axios.defaults.baseURL = ...
- [luogu4242] 树上的毒瘤
题目描述 这棵树上有n个节点,由n−1条树枝相连.初始时树上都挂了一个毒瘤,颜色为ci.接下来Salamander将会进行q个操作. Salamander有时会修改树上某个点到另外一个点的简单路径上所 ...
- vue实现多个元素或多个组件之间动画效果
多个元素的过渡 <style> .v-enter,.v-leave-to{ opacity: 0; } .v-enter-acitve,.v-leave-active{ opacity: ...
- SQL的主键和外键的作用
SQL的主键和外键约束 转载自:http://www.cnblogs.com/ywb-lv/archive/2012/03/12/2391860.html感谢原文作者的总结 SQL的主键和外键的作用: ...
- OPENCV mat类
OpenCV参考手册之Mat类详解 目标 我们有多种方法可以获得从现实世界的数字图像:数码相机.扫描仪.计算机体层摄影或磁共振成像就是其中的几种.在每种情况下我们(人类)看到了什么是图像.但是,转换图 ...
- Bzoj1407 Savage
Description Input 第1行为一个整数N(1<=N<=15),即 野人的数目.第2行到第N+1每行为三个整数Ci, Pi, Li (1<=Ci,Pi<=100, ...
- [bzoj1433][ZJOI2009]假期的宿舍——二分图
题目大意 传送门 题解 显然是二分图匹配. 用一些方法建图就好了. 要注意的是: 本题有多组数据!!! 初始化一定要注意!!! 代码 #include <bits/stdc++.h> us ...
- Log4Net日志分类和自动维护
背景 在程序中,我们调试运行时信息,Log4Net是一个不错的解决方案.不知道是我用的不好,用到最后反而都不想看日志了.原因是因为我n个功能使用的默认的Logger来记录日志,这样以来,所有功能记录的 ...
- VS MFC 添加菜单
新建出来的基于对话框的MFC工程是没有菜单的,如何在对话框中添加菜单?又如何给菜单的菜单项添加事件应用响应?下面小编来具体描述一下,希望能帮助到一些人. 工具/原料 电脑一台 VS2010 方法/ ...