Cum se poate apela procedura stocată în fundal?

Am o procedură stocată care durează aproximativ 2-3 minute pentru a finaliza execuția. De la ado.net vreau să fac că executarea procedurii stocate se întâmplă în background.I trebuie să revin la codul meu de îndată ce am face cererea de a procedurii memorate. Poate cineva să mă ajute la asta?

2
Bine ați venit la programarea asincronă :) Un lucru important de știut este funcționalitatea reală a acestei proceduri stocate. Are într-adevăr nevoie să se întâmple în linie în interfața cu utilizatorul? Ce face? Dacă vă gândiți la acest lucru, vă puteți gândi cum să-l încărcați în alt thread sau alt proces în întregime. Interfața cu utilizatorul în sine ar trebui cu siguranță să nu trebuiască să aștepte atât de mult timp.
adăugat autor David, sursa
Ați considerat că proecul în sine are nevoie de tuning de performanță.
adăugat autor HLGEM, sursa

4 răspunsuri

Ar trebui să investiga Threading . Pe scurt, creați un fir cu apelul la procedura stocată. Când porniți firul, acesta se execută în câmpul de gunoi. Acest fir poate avea o funcție de apel invers care se numește atunci când firul se termină.

BackgroundWorker is an easy way to create threads.

2
adăugat

Puteți încerca să folosiți programarea reactivă (Rx)

Rx este noua propunere Microsoft pentru simplificarea apelurilor asincrone printre alte caracteristici interesante

http://msdn.microsoft.com/en-us/data/gg577609.aspx

Pachetul Nuget este:

https://nuget.org/packages/Rx-Main/1.0.11226

Ar fi ceva de genul:

   //here call the sp
    var o = Observable.Start(() => { Thread.Sleep(1000); });

    o.Subscribe(x => { Console.WriteLine("Operation done"); });
0
adăugat

Aveți de fapt două opțiuni. După cum au menționat și alții, o soluție foarte rezonabilă este de a realiza filetarea în stratul aplicației. Un fir lansează procedura stocată și așteaptă întoarcerea.

Cealaltă este să faceți ceva similar în baza de date. SQL Server, de exemplu, oferă ceva numit cozi asincrone. Puteți trimite codul la o interogare, care apoi este preluată de un cititor de coadă și rulează în fundal.

În cazul tău, filetarea în aplicație este probabil o soluție fină. Voiam doar să vă aduc în atenție ideea de așteptare, în cazul în care anticipați că volumul de lucru al unei proceduri stocate ar putea deveni mult și nu doriți să gestionați toate firele din aplicația dvs.

0
adăugat

Luați în considerare utilizarea unui fir de lucrător pentru a executa apelul sproc pe un apel de fundal. Vreți să știți rezultatul apelului sproc? Dacă faceți acest lucru, va trebui să așteptați și să vă alăturați firului lucrător care execută apelul dvs. sproc. În caz contrar, puteți doar "foc și uita" - dar este posibil să nu știți despre erori/excepții în acest caz.

Here is an excellent post by Joe Albahari one threading.

0
adăugat