7

Ecco lo scenario: All'accesso utente avvio un'attività che sta ascoltando IMAP inattivo per le notifiche e ha una connessione live con il client tramite signalr (tipo di notifica push). Ora il problema è come cancellare questa attività? Ad esempio, l'utente annulla la notifica push o effettua il logout.Come annullare un'attività asincrona tramite richiesta web?

EDIT: come per la mia comprensione, ad esempio se 5 utenti hanno eseguito l'accesso al sito ci sono 5 attività in esecuzione? quindi come posso cancellare le singole attività.

+0

è possibile chiarire che i processi 'Task' sono in esecuzione nel servizio Web o nel servizio di Windows o altro? –

+1

hi L'attività @HarshBaid è in esecuzione all'interno di un'app mvc. – Iternity

risposta

1

Il lavoratore asincrona deve essere modificato per supportare la cancellazione

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

Si potrebbe anche usare il lavoratore di fondo, che è un po 'meno complicato http://msdn.microsoft.com/en-us/library/system.componentmodel.backgroundworker.cancelasync.aspx

Un problema che ho incontrato quando si invia un annullare una fonte esterna (DB, app) che ha già avviato un lavoro, se non supporta l'annullamento, potrebbe essere necessario attendere fino al termine.

EDIT: Non l'ho mai fatto con MVC ma ho trovato un buon articolo su "Uso di un token di cancellazione" per un processo asycn che utilizza un parametro CancellazioneToken in MVC4. http://www.asp.net/mvc/tutorials/mvc-4/using-asynchronous-methods-in-aspnet-mvc-4 spero che aiuti.

1

Ogni volta che si crea un'attività, è necessario creare un token di cancellazione e passare ad esso. Poiché ogni utente è associato a un'attività, è possibile memorizzare l'attività e il token di annullamento nella sessione dell'utente.

Ora utilizzando il token di annullamento memorizzato nella sessione dell'utente è possibile annullare facilmente l'attività quando si disconnette o premere il pulsante Annulla.

Vedere questo post per l'annullamento dell'attività.

+0

grazie @Mark. Ho pensato di memorizzare il token, ma come lo memorizzo quando non è serializzabile? – Iternity

+0

@Iternity Stai utilizzando lo stato di sessione out-of-proc? Non hai detto questo nella domanda – VJAI

+0

Sto usando la sessione In-Proc. non sono sicuro di come faccia differenza. spiega per favore. – Iternity

0

Il processo può uccidere se stesso senza attività da parte dell'utente. Il modo più semplice per scambiare le variabili nell'altro thread: un file. Supponiamo che il browser client sia ancora aperto, la richiesta del timer javascript Ajax richiede, che scrive sul server il timestamp in un file. Il tuo compito legge anche periodicamente il file, e quando il timestamp è troppo vecchio, il processo si uccide. Il valore del timeout di attività è possibile impostare la vostra scelta.