25. juli 2017 - 18:05Der er
5 kommentarer og 3 løsninger
Send emails fra asp.net mvc i seperat traad
Hej,
Jeg har en asp.net mvc applikation hvorfra jeg til tider sender emails til brugeren. Jeg sender f.eks. en email til brugeren, hvis han oensker et nyt kodeord.
Det tager tid at sende en email, noget der irreterer brugeren. Derfor taenker jeg paa at lave en loesning hvor alle emails bliver lagt ind I en tabel, og fra en seperat traad sender jeg usendte emails. Hvordan goer man dette smartest I asp.net mvc, uden at sende den samme email flere gange?
Jeg har kigget paa AddOnBeginRequestAsync og semaphore, men jeg er ikke sikker paa at det daekker mit behov. Findes der en smartere loesning?
Kunne du ikke "bare" have en service kørende, som kigger i din tabel:
vælg alle "mails" hvor afsendt = 0 Når så din service finder en email og afsender den, så opdatere du til afsendt=1 Dermed sikrer du en email kun afsendes en gang. Og du vil ikke påvirke brugerens oplevelse på din side.
Med cron jobs, saa kan jeg risikere at et nyt cron job bliver eksekveret inden det tidligere cron job stopper. Cron jobbet kalder en asp.net side. Hvordan sikrer jeg mig I asp.net MVC at dette ikke sker? Skal man bruge semaphores, eller ???
Hav en tilstand mere på dit flag, som du sætter når du starter din behandling af udsendelsen, så du kan samle op på efterladte udsendelser (som ikke er gjort færdige).
Det er muligt at have 3 states: waiting, inprogress og done. Husk og goer koden concurrency sikker. Jeg vil tro at du bliver noedt til at haeve transaction isolation level.
Alternativt saa oeg intervallet mellem at jobbet koerer og lad jobbet vaere massivt multi-threaded (email afsendelse egner sig til dette).
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.