HttpContextAccessor 之singleton
2021-12-16 17:24 qgbo 阅读(289) 评论(0) 收藏 举报HttpContextAccessor 在.Net 系统中生命周期是singleton。
每一个请求来的时候不是应该New 一个 Context 吗?
它的源码中用到了这个:AsyncLocal<int>
每一个线程会保存它的本地的值。相当于线程的内部变量。
下面代码会打印:
100,100,100
300,300,100
100,100,100
300,300,100
var _local = 0; AsyncLocal<int> _asyncLocal = new AsyncLocal<int>(); ThreadLocal<int> _threadLocal= new ThreadLocal<int>();Task.Run(() </span>=><span style="color: #000000;"> { Thread.Sleep(</span><span style="color: #800080;">200</span><span style="color: #000000;">); </span><span style="color: #0000ff;">while</span> (<span style="color: #0000ff;">true</span><span style="color: #000000;">) { _asyncLocal.Value </span>= <span style="color: #800080;">100</span><span style="color: #000000;">; _threadLocal.Value </span>= <span style="color: #800080;">100</span><span style="color: #000000;">; _local </span>= <span style="color: #800080;">100</span><span style="color: #000000;">; Thread.Sleep(</span><span style="color: #800080;">2000</span><span style="color: #000000;">); Console.WriteLine(_asyncLocal.Value </span>+ $<span style="color: #800000;">"</span><span style="color: #800000;"> { _threadLocal.Value} </span><span style="color: #800000;">"</span> +<span style="color: #000000;"> _local); } }); Task.Run(() </span>=><span style="color: #000000;"> { Thread.Sleep(</span><span style="color: #800080;">200</span><span style="color: #000000;">); _asyncLocal.Value </span>= <span style="color: #800080;">300</span><span style="color: #000000;">; _threadLocal .Value</span>= <span style="color: #800080;">300</span><span style="color: #000000;">; _local </span>= <span style="color: #800080;">300</span><span style="color: #000000;">; </span><span style="color: #0000ff;">while</span> (<span style="color: #0000ff;">true</span><span style="color: #000000;">) { Thread.Sleep(</span><span style="color: #800080;">2000</span><span style="color: #000000;">); Console.WriteLine(_asyncLocal.Value </span>+ $<span style="color: #800000;">"</span><span style="color: #800000;"> { _threadLocal.Value} </span><span style="color: #800000;">"</span> +<span style="color: #000000;"> _local); } }); Console.ReadLine();</span></pre>
气功波(18037675651)
浙公网安备 33010602011771号