前言:
在.net Core中使用了大量的DI技巧,於IServiceCollection中註冊了DbContext讓ThreadPool可以統一管理DB的接口,於每個建構式中都可以注入一個DbContext Instance供該次Request使用(Life time為Scope),
最近幾年又流行了使用Task來非同步處理作業,增加CPU的使用效率。
小弟最近管理案子發現使用多執行續處理的部分開發人員為了避免DbContext Instance發生Race condition的情況,而會使用ConnectionString來實作一個Instance,但是常常會忘記做Dispose導致DB的IO端口被占滿,目前主要是要求於實作Instance時一定要配合使用using就可以解決這個問題。
問題:
請問如何可以從注入時就讓開發人員於多執行續調用DbContext不必考慮Race condition與Dispose的問題?
後言:
有考慮過自己實作一套DbContext的管理ThreadPool來處理,簡單的概念為於DbContext Excute時,先於ThreadPool紀錄該Thread Id,如果該Thread Id還未註冊於ThreadPool之中就提供一個DbContext Instance供其Excute,已經存在了即驗證該Instance是否已被Dispose...等等的後續處理。
想法很天真美好,路途一定坎坷難行,於是想在開始前先來請教各位先進、大神有沒有其他的解決方式或是看法。