Я пытаюсь выполнить хранимую процедуру в нескольких задачах, но это может быть предоставление данных из кеша.Чтение данных в потоке возвращает ту же запись
Вот мой код:
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 * потоков/задач одновременно приводит к получению одинаковых результатов? Это * будет иметь смысл с учетом вашей структуры. Ваши транзакции будут блокированы при обновлении, но существенно обновят один и тот же список записей. –