Мне нужно отменить фоновую задачу, запущенную с помощью ThreadPool.QueueUserWorkItem (...). Я знаю, что у BackgroundWorker есть конструкции, специально предназначенные для такого рода вещей, но я считаю, что в этом случае это излишне, поскольку не задействован пользовательский интерфейс. Под отменой я просто подразумеваю принудительное завершение метода обратного вызова.
Каковы ловушки добавления чего-то вроде следующего в мой класс?
// Cancellation Property.
private bool _canceled;
public bool CancelTask
{
get { return _canceled; }
set { _canceled = value; }
}
public void DoSomeTask()
{
int iterations = 50;
ThreadPool.QueueUserWorkItem(new WaitCallback(ThreadPoolCallback), iterations);
}
private void ThreadPoolCallback(object state)
{
if (_canceled)
return; // don't even start.
int iterations = (int)state;
for (int i = 0; !_canceled && i < iterations; i++)
{
//
// do work ...
//
// This allows you to cancel in the middle of an iteration...
if (_canceled)
break;
}
}
Есть ли лучший способ?