, .
-, , ASP.NET. global.asax, .
, IIS , . , ( ). . .
Windows . -, .
Quartz scheduler. , , , . , Quartz IJob.
class EmailSender : Quartz.IJob
{
public void Execute(JobExecutionContext context)
{
}
}
, Quartz Execute , , .
, , . , , !
, "lock" . , , . , , guid :
UPDATE EmailQueue SET Lock=someGuid WHERE Lock IS NULL LIMIT 1;
SELECT * FROM EmailQueue WHERE Lock=someGuid;
concurrency. UPDATE ( ) . SELECT . (, , ), , .
:
- , , .
: , .
-, ASP . , , , . , .
, , . , 30 . , 5 . (), , , , , .
-, 5 , . , ( ). , , node ( - , ), . "" . , . , node, , , .
, . Quartz , , .
, . , . , -, , . :
class EmailSender : IJob {
static int counter = 0;
public void Execute(JobExecutionContext context) {
counter++;
}
}
, counter .
Thread A Thread B
Execute()
Execute()
Get counter (0)
Get counter (0)
Increment (1)
Increment (1)
Store value
Store value
counter = 1
counter 2, . , , :
Thread A Thread B
Execute()
Execute()
Get counter (0)
Increment (1)
Store value
Get counter (1)
Increment (2)
Store value
counter = 2
... , .
, Execute - , .