У меня есть этот обработчик событий в asp.net странице:Как удалить текущую задачу в потоках пула?
protected void SetDescPoint(object sender, EventArgs e)
{
try
{
ThreadPool.QueueUserWorkItem(new System.Threading.WaitCallback(foo));
}
catch (Exception)
{ }
}
private void foo(object a)
{
try
{
System.Diagnostics.Debug.WriteLine("Start - " + DateTime.Now.ToString("h:mm:ss tt"));
TimeSpan minutes = TimeSpan.FromMinutes(10);
System.Threading.Thread.Sleep(minutes);
string path = UniquePath();
File.Delete(path);
System.Diagnostics.Debug.WriteLine("Deleted - " + DateTime.Now.ToString("h:mm:ss tt"));
}
catch (Exception ex)
{
Debug.WriteLine("EXCEPTION - " + ex.Message);
}
}
SetDescPoint является обработчиком события и выстрелил в ответ на клиент event.As вы можете увидеть, функция Foo имеет Thread.Sleep (10minutes) есть может быть ситуация, когда обработчик событий запускается во временном интервале менее 10 минут, поэтому в этой ситуации мне нужно удалить текущую задачу (foo()) в потоках пула.
Любая идея, как я могу ее реализовать?
Вы можете использовать [аннулирование задачи] (https://msdn.microsoft.com/en-us/library/dd997396 (v = vs.110) .aspx). –
У вас здесь ниточка. Вместо 'Thread.Sleep', используйте' Task.Delay', который использует таймер внутри. И у него есть хороший побочный эффект от решения вашей проблемы, поддерживая использование CancellationToken для отмены ожидания –
@MartinLiversage. Можете ли вы показать пример, как я могу использовать отмену задачи в моем примере? – Michael