• 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(4000);
                    return 0;
                });
                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(100);
                }
            }
        }

  • 相关阅读:
    XML传输数据导致的安全问题
    XML的学习
    docker的笔记
    对于glog中ShutdownGoogleLogging后不能再次InitGoogleLogging问题的解决办法
    游戏分类英文缩写
    带属性的向前声明:warning: type attributes are honored only at type definition
    linux GCC编译错误:CPU you selected does not support x8664 instruction set
    电商数据分析
    日常电脑软件推荐清单
    优秀开源组合:助你快速研发
  • 原文地址:https://www.cnblogs.com/jimaojin/p/7462358.html
Copyright © 2020-2023  润新知