请求取消令牌的任务事件或操作 [英] Task event or action on cancel token requested
本文介绍了请求取消令牌的任务事件或操作的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
这是我的代码:
public sealed class ProcessingTask : ProcessingObject
{
private CancellationTokenSource _cancelToken;
private int _timeOut = 10000;
public int ProcessObjectID { get; private set; }
public Task ProcessObjectTask { get; private set; }
public QueueObject queueObject { private get; set; }
public ProcessingTask(int processObjectID, Uri url)
: base(url)
{
this.ProcessObjectID = processObjectID;
}
public void ResetTask()
{
_cancelToken = new CancellationTokenSource(_timeOut);
ProcessObjectTask = new Task(() => DoTaskWork(), _cancelToken.Token);
}
private void DoTaskWork()
{
Console.WriteLine("Thread {0} was started...", ProcessObjectID);
//
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(Url); // imitate hard process
HttpWebResponse response = (HttpWebResponse)request.GetResponse(); //
response.Dispose();
//
// Your logic here
//queueObject.QueueObjectId - dequeud object is available here
//
if (_cancelToken.IsCancellationRequested)
{
Console.WriteLine("Thread {0} was timed out...", ProcessObjectID);
}
else
{
Console.WriteLine("Thread {0} was finished...", ProcessObjectID);
}
}
}
如果 CancellationRequested,我想知道是否存在任何使用事件(或某些操作)的方法.我的意思是我需要在 _timeout 过期的那一刻做 SomeMethod() .任何人都可以解释我:一般有可能吗?
I wonder if exists any way to use event (or some action) if CancellationRequested. I mean that I need to do SomeMethod() exactly in the moment when _timeout Expired. Can anyone explain me: is it possible in general?
推荐答案
您正在寻找 CancellationToken.Register
:
You're looking for CancellationToken.Register
:
注册将在取消此 CancellationToken 时调用的委托.
Registers a delegate that will be called when this CancellationToken is canceled.
像这样注册一个动作:
_cancelToken.Token.Register(() => DoStuff());
这篇关于请求取消令牌的任务事件或操作的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文