我試圖在多個任務中執行存儲過程,但它可能是從緩存中提供數據。讀取線程中的數據返回相同的記錄
這裏是我的代碼:
var entities = new PhonePushEntities();
var lst = Task.Run(() => entities.GetInAppAlertBatch("ios", DataPacketSize).ToList());
此代碼也在父任務運行。
存儲過程:
ALTER PROCEDURE [dbo].[GetInAppAlertBatch]
@DeviceType as varchar(10),
@PSize as int
AS
BEGIN
SET NOCOUNT ON;
begin tran InApp_Fetch_Process
declare @t as TABLE (id int)
insert into @t
SELECT top (@PSize) sKey FROM InAppAlerts
where JobStatus = 'pending' AND DeviceType = @DeviceType
UPDATE InAppAlerts
SET JobStatus = 'inprocess'
where sKey in (SELECT id from @t)
select * from InAppAlerts where sKey in (select id from @t)
COMMIT TRAN InApp_Fetch_Process
END
我的問題是邏輯:如果我們看到存儲過程,那麼每次它應該返回唯一的數據,但它返回了一些線程相同的記錄。
又有什麼問題?或者有什麼問題?你需要什麼幫助? –
@DawidFerenczy,邏輯上,如果我們看到SP,那麼每次它應該給出唯一的數據,但是給某些線程提供了相同的記錄。 – imlim
你是說,同時運行* N *個線程/任務會導致每個都獲得相同的結果嗎?考慮到你的結構,它*會有意義。您的交易將阻止更新,但基本上會更新相同的記錄列表。 –