国产片侵犯亲女视频播放_亚洲精品二区_在线免费国产视频_欧美精品一区二区三区在线_少妇久久久_在线观看av不卡

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - ASP.NET教程 - .net core并發下線程安全問題詳解

.net core并發下線程安全問題詳解

2020-06-12 16:57Vam8023 ASP.NET教程

這篇文章主要給大家介紹了關于.net core并發下線程安全問題的相關資料,文中通過示例代碼介紹的非常詳細,對大家學習或者使用.net core具有一定的參考學習價值,需要的朋友們下面來一起學習學習吧

抱歉,其實內容并不如題!!!

背景(寫測試demo所出現的異常,供大家學習與拍磚):

.net core webapi項目,做了一個授權的filter(真正的生產項目的話,JWT很棒),單個接口測試沒有問題,當用前端在同一個頁面調用多個接口的時候,運行服務,打開頁面,然后……Exceptions……(真正的開發中大家應該也會遇到)

異常1:An attempt was made to use the context while it is being configured. A DbContext instance cannot be used inside OnConfiguring since it is still being configured at this point. This can happen if a second operation is started on this context before a previous operation completed. Any instance members are not guaranteed to be thread safe.

異常2:A second operation started on this context before a previous operation completed. Any instance members are not guaranteed to be thread safe.

異常3:Invalid attempt to call Read when reader is closed.

異常4:Unable to cast object of type 'System.Data.ProviderBase.DbConnectionClosedConnecting' to type 'System.Data.SqlClient.SqlInternalConnectionTds'.

異常5:Object reference not set to an instance of an object.

異常6:不允許啟動新事務,因為有其他線程正在該會話中運行。

異常7:An error occurred while updating the entries. See the inner exception for details.

嘗試運行了N多遍,嗯,挺不穩定的(代碼垃圾!),那看看異常吧

一看很容易理解:在前一個操作完成之前,在此上下文中啟動第二個操作。任何實例成員都不能保證是線程安全的。就是說,我在用這個上下文的時候,你來搶個屁……

這個可能發生在并發的情況下,同時使用了同一個上下文……那么打開一個頁面,為什么會同時使用同一個上下文呢?好吧,在這里要負荊請罪了(可以說是自己的問題)

我在Filter里面有查詢,用到數據庫上下文<DbContext> 。罪過咯,直接想在Filter里面過濾黑名單,所以查了數據庫(這個業務是不合理的,這是一個作死的行為,請謹慎看待,這里做學習討論之用)。

?
1
2
3
4
5
6
7
8
9
10
11
12
13
public class AuthFilterAttribute : ActionFilterAttribute
{
 
 public override void OnActionExecuting(ActionExecutingContext context)
 {
 
  base.OnActionExecuting(context);
    .....
  
  //判斷是否在黑名單內
  var blackList = _app.GetBlackList();
  ......
 }}

這里為什么用 ActionFilterAttribute ?是因為測試的時候要監測一下接口運行的整個過程,So……

然后還有一些錯是:對象引用未設置為對象的實例。這個錯誤太常見,不就是對象為Null了嗎?但是,未實例化對象在業務邏輯上的情況太多了。我的應該有:

1、沒有獲取到當前對象,這是.net core,不是.net,不是因為沒有new對象。是注入中沒有注入成功,獲取注入后,沒有獲取到。(但我本來運行的好好的,是因為一下是打開對接的頁面才發生的問題,可以排除了)

2、本來已經實例的對象被回收了……(這可能性嘛……有一定的可能,但發生在哪呢?)

找啊找,其實方向有了,但是自己卻沒想起來……

其實如果不確定的話,倒是可以先找找別人是怎么說的(不是為了裝X,找開發上的問題我是推薦 github 和 stackoverflow 的,大部分的問題都可以找到):

(1)異常 1 還有同樣 一條搜索結果

.net core并發下線程安全問題詳解

.net core并發下線程安全問題詳解

(2)異常 2

 .net core并發下線程安全問題詳解

雖然以上找的不一定是真正的答案,至少提供了一個方向,并且你至少可以嘗試性地去解決一下。這里提供的方向其實很明確:

1、是否應該使用 Scoped 和 Transient 的,你卻使用了 Singleton;

2、多線程中使用了 async 卻沒有配對的使用 await;

至少我找到的關鍵點是這兩個。

那怎么找到并解決這個問題呢,.net core都是注入的,當然 AuthFilterAttribute 也是注入的。跑到 Startup一看,很明顯,問題出在哪里了 -- 單例!本應該是Scoped模式的,卻用了單例。

那就將 AuthFilterAttribute 換一種注入模式就行啦。

.net core并發下線程安全問題詳解

改為

.net core并發下線程安全問題詳解

我使用的是Filter,Filter有自己的生命周期,去確認一下:Filter的官方文檔

看到一張圖!!!(當然你也可以細細研讀一下這個文檔)如下:

.net core并發下線程安全問題詳解

這還不明顯?!!!

Filter會被回收的!!!這同樣解釋了 異常3、4、5、6、7所發生的原因。

OK,問題已經解決了,這是在開發中遇到的問題,可以說是涉及到.net core 本身的運行機制。

我算是一個應用型的程序員,喜歡在應用中學習底層的東西。那么接下來當然就可以擴展 Singleton、Scoped 和 Transient 等知識了。

總結

以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作具有一定的參考學習價值,謝謝大家對服務器之家的支持。

原文鏈接:https://www.cnblogs.com/Vam8023/p/10656777.html

延伸 · 閱讀

精彩推薦
Weibo Article 1 Weibo Article 2 Weibo Article 3 Weibo Article 4 Weibo Article 5 Weibo Article 6 Weibo Article 7 Weibo Article 8 Weibo Article 9 Weibo Article 10 Weibo Article 11 Weibo Article 12 Weibo Article 13 Weibo Article 14 Weibo Article 15 Weibo Article 16 Weibo Article 17 Weibo Article 18 Weibo Article 19 Weibo Article 20 Weibo Article 21 Weibo Article 22 Weibo Article 23 Weibo Article 24 Weibo Article 25
主站蜘蛛池模板: 在线中文字幕第一页 | 日日噜| 性视频网站免费 | 国产成人精品av | 国产视频黄在线观看 | 亚洲电影在线播放 | 精品久久99 | 色婷婷一二三 | 精品国产乱码久久久久久1区2区 | 91综合网| 特黄特色大片免费视频观看 | av片网站| 91毛片网 | av一区二区三区免费观看 | 久久99精品久久久久蜜臀 | 精品一区二区6 | 国产成人精品一区二区三区视频 | 久久精品影片 | caoporn免费| 日本精品久久 | 欧美日韩国产在线播放 | 日韩免费视频 | 久久国产精品视频 | 久草天堂| 国产欧美综合一区二区三区 | 色天天天天色 | 在线中文字幕av | 国产一区久久久 | 久久精品国产一区二区电影 | 人人鲁人人莫一区二区三区 | 国产精品久久久久久久免费大片 | 日韩欧美1区 | 亚洲一区在线日韩在线深爱 | 永久在线观看 | 色网综合 | 一区二区三区在线播放 | 久久久久久国产精品 | 高清一区二区三区 | 国产一区二区在线免费观看 | 久草热在线 | 中文字幕在线一区二区三区 |