CallContext,ThreadStatic,AsyncLocal<T>,ThreadLocal<T>,学习笔记
1.CallContext
在当前调用上下文的线程数据槽里存储对象
2.ThreadStatic
是一个特性
3.AsyncLocal<T>
是一个类型,该字段应当为static,保证单例,在单例的模式下,在不同的线程上下文环境之中才可以保证线程内唯一,否则如果不是static的话,那么在每一次调用的时候都会产生一个引用,对应一个新的AsyncLocal<T>
4.ThreadLocal<T>
是一个类型,该字段应当为static
async声明的函数,都会开一个新的线程,
一旦一个函数声明为async,那么这就是一个新的线程,就算是还没有执行到await等待的代码,也已经开过了一个新的线程!
static class GuidFactory
{
private static AsyncLocal<string> _asyncLocalGuid = new AsyncLocal<string>();
public static string CurrentGuid
{
get
{
if (_asyncLocalGuid.Value == null)
{
_asyncLocalGuid.Value = Guid.NewGuid().ToString();
}
return _asyncLocalGuid.Value;
}
}
} class APP
{
private async void Fun1()
{
Console.WriteLine("外部:" + GuidFactory.CurrentGuid);
Console.WriteLine("外部:" + GuidFactory.CurrentGuid);
int num = await Task.Factory.StartNew<int>(() =>
{
Console.WriteLine("内部:" + GuidFactory.CurrentGuid);
Console.WriteLine("内部:" + GuidFactory.CurrentGuid);
Thread.Sleep();
return ;
});
Console.WriteLine("外部:" + GuidFactory.CurrentGuid);
Console.WriteLine("外部:" + GuidFactory.CurrentGuid);
} private async void Fun2()
{
Console.WriteLine("外部:" + GuidFactory.CurrentGuid);
Console.WriteLine("外部:" + GuidFactory.CurrentGuid);
} public APP()
{
Fun1();
Fun1(); //Fun2();
//Fun2(); while (true)
{
Thread.Sleep();
}
}
}


CallContext,ThreadStatic,AsyncLocal<T>,ThreadLocal<T>,学习笔记的更多相关文章
- ThreadLocal类学习笔记
这个类在java1.2中就出现了,线程独有的变量(每个线程都有一份变量),使用它的好处之一就是可以少传许多参数. 在哪里用到它呢?有连接池的地方就有它的身影,连接池包括数据库连接池,网络连接池等. i ...
- 多线程学习笔记九之ThreadLocal
目录 多线程学习笔记九之ThreadLocal 简介 类结构 源码分析 ThreadLocalMap set(T value) get() remove() 为什么ThreadLocalMap的键是W ...
- AsyncLocal 与 ThreadLocal ThreadStatic特性简介
AsyncLocal 与 ThreadLocal [.NET深呼吸]基于异步上下文的本地变量(AsyncLocal) https://www.cnblogs.com/tcjiaan/p/5007737 ...
- 并发编程学习笔记(8)----ThreadLocal的使用及源码分析
1. ThreadLocal的理解 ThreadLocal,顾名思义,就是线程的本地变量,ThreadLocal会为每个线程创建一个本地变量副本,使得使用ThreadLocal管理的变量在多线程的环境 ...
- SpringMVC:学习笔记(12)——ThreadLocal实现会话共享
SpringMVC:学习笔记(12)——ThreadLocal实现会话共享 ThreadLocal ThreadLocal,被称为线程局部变量.在并发编程的情况下,使用ThreadLocal创建的变量 ...
- SpringNet学习笔记一
---恢复内容开始--- 最近看了园子里的大神分享的springnet框架的知识,感觉挺不错的,自己闲下来也研究研究springnet.这几天看了springnet容器的基础篇IOC和AOP,也有点个 ...
- springmvc学习笔记--Interceptor机制和实践
前言: Spring的AOP理念, 以及j2ee中责任链(过滤器链)的设计模式, 确实深入人心, 处处可以看到它的身影. 这次借项目空闲, 来总结一下SpringMVC的Interceptor机制, ...
- Hibernate学习笔记
一.Hibernate基础 1.Hibernate简介 Hibernate是一种对象关系映射(ORM)框架,是实现持久化存储的一种解决方案.Java包括Java类到数据库表的映射和数据查询及获取的方法 ...
- webx学习笔记
Webx学习笔记周建旭 2014-08-01 Webx工作流程 图 3.2. Webx Framework如何响应请求 当Webx Framework接收到一个来自WEB的请求以后,实际上它主要做了两 ...
- SpringBoot + Spring Security 学习笔记(二)安全认证流程源码详解
用户认证流程 UsernamePasswordAuthenticationFilter 我们直接来看UsernamePasswordAuthenticationFilter类, public clas ...
随机推荐
- SqlServer 四大排名函数(ROW_NUMBER、RANK、DENSE_RANK、NTILE)简介
CREATE TABLE [dbo].[Order]( [ID] [int] IDENTITY(1,1) NOT NULL, [UserId] [int] NOT NULL, [TotalPrice] ...
- Doracle.jdbc.J2EE13Compliant=true
To make the Oracle driver behave in a Java EE-compliant manner, you must define the following JVM pr ...
- [转]Oh My Zsh,安装,主题配置
https://swp-song.com/2017/08/20/Tools/OhMyZsh%E5%AE%89%E8%A3%85%E5%92%8C%E4%B8%BB%E9%A2%98%E9%85%8D% ...
- Azure附加新磁盘,差点掉进去的那个坑,注意临时数据盘
接今早的mysql问题,最终原因是mysql数据库的数据库文件以及pid丢失,当我还纳闷为什么丢失的情况下 我研究了下Azure云平台的数据磁盘原理,在Azure下,新建vm(centos)后只会提供 ...
- nginx反向代理uwsgi django服务器搭建总结
1.安装python.django.虚拟环境 参考帖子:安装python django https://blog.csdn.net/a249900679/article/details/5152720 ...
- 【转】ArcGIS10的附件功能
转自:http://blog.csdn.net/linghe301/article/details/6386176 老是忘记怎么使用这个ArcGIS10的附件功能,这次就做个记录吧. 在项目应用过程中 ...
- zabbix通过shell脚本安装异常问题定位
htxk-106主机信息现象如下: 通过zabbix_get命令 zabbix_get [7189]: Check access restrictions in Zabbix agent config ...
- k8s 相关命令
kompose convert -f docker-compose-pro.yml k8s数据卷挂载: https://blog.csdn.net/wlhdo71920145/article/deta ...
- Yii常用方法
//获取当前用户的ip Yii::$app->request->userIP
- Berlekamp-Massey算法简单介绍
请阅读本文的同学们注意:之前这篇博客和所附代码有点问题,求的不一定是最短递推式,非常抱歉 看毛爷爷的论文大概断断续续看了一个月了,看得不是很懂,google了一波好像很快就看懂了,就先口胡一下这个算法 ...