5
我想在System.Threading.Tasks命名空間中使用新的線程構造實現可取消的工作線程。 到目前爲止,我想出了這個實現:如何實現可取消的工作線程
public sealed class Scheduler
{
private CancellationTokenSource _cancellationTokenSource;
public System.Threading.Tasks.Task Worker { get; private set; }
public void Start()
{
_cancellationTokenSource = new CancellationTokenSource();
Worker = System.Threading.Tasks.Task.Factory.StartNew(
() => RunTasks(_cancellationTokenSource.Token),
_cancellationTokenSource.Token
);
}
private static void RunTasks(CancellationToken cancellationToken)
{
while (!cancellationToken.IsCancellationRequested)
{
Thread.Sleep(1000); // simulate work
}
}
public void Stop()
{
try
{
_cancellationTokenSource.Cancel();
Worker.Wait(_cancellationTokenSource.Token);
}
catch (OperationCanceledException)
{
// OperationCanceledException is expected when a Task is cancelled.
}
}
}
當Stop()
回到我期待Worker.Status
是TaskStatus.Canceled
。
我的單元測試表明,在一定條件下Worker.Status
仍然設置爲TaskStatus.Running
。
這是實現可取消的工作線程的正確方法嗎?
是的,這解決了問題。謝謝。 – 2010-06-01 08:04:17