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);
                }
            }
        }

  • 相关阅读:
    Python 从入门到进阶之路(一)
    Egg 企业级应用开发框架的搭建
    koa2 从入门到进阶之路 (七)
    koa2 从入门到进阶之路 (六)
    koa2 从入门到进阶之路 (五)
    衣服洗一个月之后失踪,这个互联网洗衣平台把衣服洗出了翅膀
    CSS3 Gradient 渐变还能这么玩
    MessageChannel 消息通道
    前端面试(算法篇)
    JavaScript 中的相等操作符 ( 详解 [] == []、[] == ![]、{} == !{} )
  • 原文地址:https://www.cnblogs.com/jimaojin/p/7462358.html
Copyright © 2011-2022 走看看