2011-11-16 10 views
5

Podczas wywoływania funkcji BeginInvoke na uczestniku akcja jest wykonywana w osobnym wątku. Jeśli jest wywoływana w ASP.NET, czy używa wątku roboczego CLR? Lub używa wątku roboczego IIS?używanie delegatów w ASP.NET do obsługi operacji asynchronicznych

Jeśli to drugie, będę musiał użyć asynchronicznego wzorca ASP.NET, aby zapewnić wykonanie akcji w wątku roboczym CLR. Ale wolałbym tego nie robić, jeśli akcja kończy się na BeginInvoke.

Odpowiedz

6

używa wątku roboczego CLR.

jak opisano w here

Aby rozpocząć, ASP.NET używa wątku CLR basen procesu szerokości do zgłoszeń serwisowych (więcej tła na puli wątków CLR, zobacz kolumnę .NET w tej kwestii).

EDIT:

inny zasób jest this blog

Niestety, wątek wykorzystywane przez BeginInvoke jest rzeczywiście pochodzą z puli wątków jednego pracownika, który jest wykorzystywany przez ASP.NET do obsługi Page kupna

+0

Dzięki. MVC obsługuje model asynchroniczny. Pojawia się, jeśli wykorzystam to wraz z techniką BeginInvoke, moja strona szybko się zwróci, a praca nie zajmie wątku roboczego IIS. Poprawny? –

+0

Odświeżanie tego wpisu na blogu, mogę po prostu zrobić technikę Thread.Start(). Dla mojej aplikacji nie będę narażony na więcej niż garść tych procesów (zazwyczaj tylko 1), więc jest to prawdopodobnie najłatwiejsze/najbardziej dostępne rozwiązanie w tym momencie dla moich potrzeb. Dla każdego, kto podąża wzdłuż wyszukiwania w poście na blogu dla frazy "Dobrze, po prostu użyję Thread.Start() i utworzę własny wątek". –

+0

@John Tak, masz rację. jeśli chcesz tylko szybko przywrócić stronę, bez wiedzy użytkownika o wynikach, to dobrze. ale to nie poprawi wydajności. – Mithir

1

Użycie niestandardowego uczestnika i wywołanie jego metody BeginInvoke oferuje szybki sposób na odpalenie wątków roboczych dla aplikacji. Niestety, wpływają one negatywnie na ogólną wydajność aplikacji, ponieważ pobierają wątki z tej samej puli, która jest używana przez ASP.NET do obsługi żądań HTTP.

Należy również pamiętać, że jeśli wywołanie zwrotne z metody asynchronicznej jest ważne, należy zablokować główny wątek przed powrotem do klienta, dopóki proces asynchroniczny nie zostanie zakończony. Jeśli logowanie i analityka to wywołanie metody "zapomnij i zapomnij", wtedy sprawy są łatwiejsze i możesz po prostu odpalić metodę i pozwolić serwerowi odpowiedzieć na klienta. Jeśli jednak oddzwanianie jest ważne i serwer zakończy przetwarzanie, nic nie dzieje się na serwerze, aby obsłużyć wywołanie zwrotne po zakończeniu; w tym przypadku przetwarzanie asynchroniczne na serwerze aplikacji ASP.NET różni się od aplikacji WinForm.

Powiązane problemy