zoukankan      html  css  js  c++  java
  • 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);
                }
            }
        }

  • 相关阅读:
    iOS关于本地推送
    [转]iOS8 自动调整UITableView和UICollectionView布局
    [转]在Storyboard中使用自定义的segue类型
    iOS 判断来电状态CTCallCenter代码块不执行问题的解决
    centos 用docker搭建elasticsearch 集群
    element-ui 使用upload上传文件并解决跨域问题
    mysql 常见关键字大全和引擎的差异
    Guava---文件操作Files
    springboot这个redies 查看内存信息
    人生也要动态规划
  • 原文地址:https://www.cnblogs.com/jimaojin/p/7462358.html
Copyright © 2011-2022 走看看