7

Este es el escenario: en el inicio de sesión del usuario, comienzo una tarea que está escuchando IMAP inactivo para las notificaciones de correo y tiene una conexión en vivo con el cliente a través del señalizador (tipo de notificación automática). Ahora el problema es ¿cómo cancelo esta tarea? es decir, cancelar notificación de inserción o cerrar sesión.Cómo cancelar la tarea asíncrona a través de la solicitud web?

EDITAR: según mi comprensión, por ejemplo, si 5 usuarios iniciaron sesión en el sitio, hay 5 tareas ejecutándose. Entonces, ¿cómo puedo cancelar tareas individuales?

+0

¿Pueden aclarar por favor que los procesos 'Task' se están ejecutando en el servicio web o en el servicio de Windows o de lo contrario? –

+1

La tarea hi @HarshBaid se ejecuta dentro de una aplicación de mvc. – Iternity

Respuesta

1

El trabajador asíncrono debe ser modificado para apoyar la cancelación

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

También puede utilizar el trabajador de fondo que es un poco menos complicado http://msdn.microsoft.com/en-us/library/system.componentmodel.backgroundworker.cancelasync.aspx

Un problema que he encontrado cuando se envía un cancelar a una fuente externa (DB, aplicación) que ya ha comenzado un trabajo, si no es compatible con la cancelación, es posible que deba esperar hasta que finalice.

EDITAR: Nunca he hecho esto con MVC, pero encontré un buen artículo sobre "Uso de un token de cancelación" para un proceso asycn que toma un parámetro CancellationToken en MVC4. http://www.asp.net/mvc/tutorials/mvc-4/using-asynchronous-methods-in-aspnet-mvc-4 Espero que ayude.

1

Cuando crea una tarea, debe crear una ficha de cancelación y pasarla. Como cada usuario está asociado a una tarea, puede almacenar la tarea y el token de cancelación en la sesión del usuario.

Ahora, usando el token de cancelación almacenado en la sesión del usuario, puede cancelar fácilmente la tarea cuando se desconecta o presiona el botón cancelar.

Consulte este post para cancelar una tarea.

+0

gracias @Mark. Pensé en guardar el token, pero ¿cómo lo almaceno cuando no es serializable? – Iternity

+0

@Iternity ¿Estás usando un estado de sesión fuera de proceso? No dijo que en la pregunta – VJAI

+0

estoy usando la sesión In-Proc. no estoy seguro de cómo hacer la diferencia. explique por favor. – Iternity

0

El proceso puede matarse a sí mismo sin actividad del usuario. La forma más fácil de intercambiar variables en el otro hilo: un archivo. Supongamos que el navegador del cliente todavía está abierto, el temporizador javascript llama a las solicitudes Ajax, que escribe en el servidor la marca de tiempo de un archivo. Su tarea también lee periódicamente el archivo, y cuando la marca de tiempo es demasiado antigua, el proceso se mata. El valor del tiempo de espera de actividad que puede establecer de su elección.

Cuestiones relacionadas