我在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(10分钟)使有可能事件处理程序在小于10分钟的时间间隔内触发的情况,所以在这种情况下,我需要删除池线程中的当前任务(foo())。
任何想法我该如何实现它?
您可以使用[取消任务](https://msdn.microsoft.com/en-us/library/dd997396(v = vs.110).aspx)。 –
你在这里没有任何线索。代替'Thread.Sleep',使用'Task.Delay'在内部使用定时器。并且通过支持使用CancellationToken取消等待来解决您的问题具有很好的副作用 –
@MartinLiversage,您能举例说明我的示例中如何使用任务取消吗? – Michael