Próbuję zaimplementować funkcję, w której jest procedura składowana na serwerze SQL, która musi zostać wywołana z aplikacji ASP MVC i przetworzona w tle (to może potrwać długo, ponieważ wywołuje zdalnie inną procedurę składowaną, aby przetworzyć plik Excela przechowywany na serwerze). Jednak odpowiedź ostatniego żądania HTTP powinna zostać zwrócona do klienta, aby interfejs użytkownika nie czekał na przetworzenie.Uruchamiaj zadanie w tle, ale zwróć odpowiedź klientowi w aplikacji WWW ASP MVC
Próbowałem na wiele różnych sposobów, ale interfejs użytkownika nadal nie reaguje od razu.
Próbowałem BackgroundWorker
ale to nie pozwalając główny wątek z odpowiedzią z powrotem do klienta, aż do jego Sporządzono przetwarzania również próbowałem:
Thread.QueueUserWorkItem(delegate { //method which performs stored procedure calls//
});
nie Nadal powrocie odpowiedź i HttpContext.Current
niedostępny w wątku tła.
Może istnieje sposób, aby rozpocząć przetwarzanie w tle, pozwalając wstrzymać go na główny wątek, aby powrócić odpowiedź na przeglądarce, a następnie wznowić wątek tła, aby wszystkie z przechowywanych przetwarzanie wywołań procedur?
Czy brakuje mi czegoś?
Czy ktoś mógłby podać pomysł, jak rozwiązać ten problem? Byłoby to bardzo doceniane.
Odradzam próby trzymania się czegoś takiego jak kontekst HTTP. Oczywiście potrzebujesz czegoś z tego, więc przekaż cokolwiek to jest do wątku w tle jako stan wątku i wykonaj przetwarzanie. Jest to nie tylko prostsze, ale dzięki zdefiniowaniu tego, czego potrzebuje twój wątek, lepiej zdefiniuj jego cel. –