在获得锁的任务上使用 CancellationTokenSource
如果线程在取消发生时获得了锁,它不会释放锁
顺便说一句,线程需要立即停止,而不是完成工作
这是此类代码的示例:
var cancellationTokenSource = new CancellationTokenSource;
Task.Run(new Action (() =>
{
while(true)
{
lock (locker)
{
DoSomething();
}
DoAnotherThing();
Task.Delay(1000, cancellationTokenSource.Token);
}
}), cancellationTokenSource.Token);
我找到了几种处理方法,但我想听听一些建议
谢谢
编辑:要回答@spender 问题,这是一个想法(缩短)的实现:
object locker = new object();
var cancellationTokenSource = new System.Threading.CancellationTokenSource;
var token = cancellationTokenSource.Token;
Task.Run(new Action (() =>
{
while(true)
{
lock (locker)
{
using (token.Register(() => token.ThrowIfCancellationRequested()))
{
break;
};
DoSomething();
}
DoAnotherThing();
Task.Delay(1000, cancellationTokenSource.Token);
}
}), cancellationTokenSource.Token);