2012-09-07 14 views
7

Oto scenariusz: przy logowaniu użytkownika uruchamiam zadanie, które nasłuchuje protokołu IMAP bezczynnie dla powiadomień o wiadomościach i ma połączenie na żywo z klientem za pośrednictwem signalr (rodzaj powiadomienia push). Teraz problem polega na tym, jak anulować to zadanie? tzn. anuluj powiadomienia push użytkownika lub wyloguj się.Jak anulować zadanie asynchroniczne za pomocą żądania internetowego?

EDYCJA: według mojego zrozumienia, na przykład, jeśli 5 użytkowników zalogowało się na stronie, 5 zadań jest uruchomionych? więc w jaki sposób mogę anulować poszczególne zadania.

+0

Czy możesz wyjaśnić, że procesy 'Task' są wykonywane w usłudze sieci Web lub usłudze Windows, czy też? –

+1

Witaj @HarshBaid Zadanie działa w aplikacji mvc. – Iternity

Odpowiedz

1

Asynchroniczny pracownik musi być zmodyfikowane do wspierania Rezygnacja

http://www.csharp-examples.net/cancel-asynchronous-method/

Można również użyć tle Pracownik, który jest nieco mniej skomplikowana http://msdn.microsoft.com/en-us/library/system.componentmodel.backgroundworker.cancelasync.aspx

Problem mam napotkanych po wysłaniu anuluj na zewnętrzne źródło (DB, aplikacja), które już rozpoczęło pracę, jeśli nie obsługuje anulowania, możesz poczekać, aż się zakończy.

EDYCJA: Nigdy nie robiłem tego z MVC, ale znalazłem dobry artykuł na temat "Używanie tokena anulowania" dla procesu asycn, który pobiera parametr CancellationToken w MVC4. http://www.asp.net/mvc/tutorials/mvc-4/using-asynchronous-methods-in-aspnet-mvc-4 nadzieję, że to pomaga.

1

Za każdym razem, gdy tworzysz zadanie, musisz utworzyć token anulowania i przekazać go. Ponieważ każdy użytkownik jest powiązany z zadaniem, możesz przechowywać token zadania i anulowania w sesji użytkownika.

Teraz za pomocą tokena anulowania zapisanego w sesji użytkownika można łatwo anulować zadanie po wylogowaniu lub nacisnąć przycisk anulowania.

Zobacz ten post dla anulowania zadania.

+0

dzięki @Mark. Zastanowiłem się nad przechowywaniem tokena, ale jak go zapisać, gdy nie można go przekształcić w serial? – Iternity

+0

@Iternity Czy używasz stanu sesji out-of-proc? Nie powiedziałeś tego w pytaniu – VJAI

+0

Używam sesji In-Proc. nie wiem, jak to robi różnicę. wytłumacz, proszę. – Iternity

0

Proces może zabić się bez żadnej aktywności ze strony użytkownika. Najprostszym sposobem na wymianę zmiennych w innym wątku - pliku. Załóżmy, że przeglądarka klienta jest wciąż otwarta, wywołania czasowe javascript Ajax, które zapisuje na serwerze sygnaturę czasową do pliku. Twoje zadanie okresowo odczytuje plik, a gdy znacznik czasu jest zbyt stary, proces sam się zabije. Wartość limitu czasu aktywności, którą możesz ustawić.

Powiązane problemy