Tengo un problema para saber cómo cancelar esta tarea en C#. No entiendo muy bien el manejo de los hilos y he intentado buscar en Google algunos ejemplos de código simples para ayudarme, pero realmente no he llegado a ninguna parte. Este es el código en el que estoy trabajando:Cancelando una tarea que recupera URLs asincrónicamente
var tasks = urls.Select(url => Task.Factory.StartNew(
state =>
{
using (var client = new WebClient())
{
lock (this)
{
// code to download stuff from URL
}
}
}, url)).ToArray();
try
{
Task.WaitAll(tasks);
}
catch (Exception e)
{
textBox2.AppendText("Error: " + e.ToString());
}
Donde "urls" es una matriz de URL. ¿Existe una manera simple de hacerlo de modo que, cuando hago clic en un botón en mi programa, la descarga de las URL se detenga por completo? Además, el fragmento de código que pegué está en una función que backgroundWorker1 llama, lo que supongo que puede complicar un poco más las cosas. (La razón por la que tengo un backgroundWorker es para que la UI no se bloquee mientras está descargando URL.)
Si de alguna manera es un poco confuso, aquí hay un resumen de lo que estaba tratando de lograr con mi código:
- Tengo una serie de URL, me gustaría descargar todas las URL de forma asincrónica sin bloquear la interfaz de usuario.
- Preferiría que el usuario detenga el programa para descargar URL haciendo clic en un botón, casi cancelando el hilo.
- Cuando el usuario vuelve a hacer clic en el botón, el programa vuelve a descargar las URL de esa matriz.
Gracias de antemano.
No incluya etiquetas en el título de su pregunta; simplemente hace más trabajo para aquellos de nosotros que se preocupan por la consistencia en SO. –