ORM使用EF6,如題:有沒有更好的建議或者方式去每5條資料開一條執行緒更新資料?
邏輯例如:資料庫有1000條資料需要更新,但是這1000條資料需要請求第三方介面或者到結果后才能更新資料,而且需要定時更新,每隔3s就要完這1000條資料
uj5u.com熱心網友回復:
題目看不懂了,你到底要啥?我也不想猜了。就按你的每5條更新
不想寫那么多復雜代碼,使用最近人類思維方式的Reactive Extensions (Rx) for .NET
nuget引入
system.Reactive
Subject<T> xx=new Subject<T>(); T我不知道是啥,自己根據情況填寫
//這里你開執行緒也好,并行也罷我不管
如果收到一條資料
xx.OnNext(收到的資料)
xx.buffer(5) //快取5條
.訂閱(lst5=>{
//這個lst5就是你要5條一組,你自己去更新資料庫
})
uj5u.com熱心網友回復:
謝謝,看不懂
uj5u.com熱心網友回復:
并不需要你看懂,明白意思即可我們跑一個模擬的,可以完成你要求。
但是這種東西你看看就罷了,千萬別用。因為實際上你的要求其實有難度的,IO和cpu負載很高(雖然跑我這個模擬代碼沒壓力,但真的跑業務代碼,估計有些吃虧)。并不建議依靠單機代碼完成。
同時訪問請求并不一定保證按順序回來,所以如果是insert問題不大,如果你是update同一條,問題就很大了。
如果是update同一條,建議是分批次請求,一次就請求5條(相同批次不要重復請求),因為這種要求屬于可拋棄的資料(我并需要3秒前的資料,我要當前的資料)
uj5u.com熱心網友回復:
你都說了五條資料一個執行緒,那你就按這個做不就行了?再說你開這么多執行緒不一定快啊,畢竟資源有限,而且你是更新資料,這就涉及到了鎖,本來一分鐘搞定的事得十分鐘
uj5u.com熱心網友回復:
多用戶命令去更新資料是要有“資料庫事務”方面的阻塞的,所以不管是一個行程、還是多個行程去并發更新資料,都會阻塞。但是讀取資料是并發處理的,可以使用await Task.WhenAll(tasks);陳述句來異步等待多個任務結束。
uj5u.com熱心網友回復:
大神 sp1234 復活了.
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/43145.html
標籤:C#
上一篇:我在C#里面寫了下載檔案的代碼,用的gridview的command按鈕,但是點擊下載后沒有反應。有沒有大俠幫幫小弟,小弟萬分感謝。
