Lo que tengo actualmente se puede resumir con este pseudocódigo:
public static void Main(string[] args)
{
var listOfObjects = Database.GetObjectsToUploadToOnlineService();
Parallel.ForEach(Upload)
}
private static void Upload(MyUploadObject obj)
{
//Build object (takes a few milliseconds)
//Format to JSON (takes a few more milliseconds)
//Upload (can take up to a max of 10 minutes)
//Wait for a response (can take up to a max of 10 minutes)
//Save response to our database (takes a few milliseconds)
}
Este programa se acaba de configurar en nuestro servidor como una tarea programada. Somos dueños del programa y podemos hacer lo que queramos con él. Mi pregunta surge de un blog sobre hacer controles automáticos de monitoreo (no tengo un enlace a mano).
Así que eso me hizo pensar: ¿cómo puedo modificar mi programa para poder iniciar otro programa de "monitoreo"? ¿O debería cambiar esto de ser un programa de consola a decir un programa WPF que está oculto?
En general, preferiría poder ejecutar un programa en mi computadora que verifique el progreso del programa a través de la red, por lo que no tengo que RDP en el servidor para verificar su estado (pero no ser el fin del mundo).
En general, supongo que me gustaría ver una ventana que diga algo como: Procesar x de y hasta ahora, se están procesando los siguientes elementos. Enumere los elementos en, como, una tabla y haga que digan como "Cargando" o "Esperando respuesta". Tal vez si me vuelvo loco también podría hacer una cola de elementos fallidos (pero eso sería solo extra).
Mi mente sigue inclinándose hacia un evento, pero no puedo entender cómo ejecutaría un programa que pueda suscribirse y cancelar la suscripción a un programa en ejecución. ¿Es esto posible?