请求取消令牌的任务事件或操作(Task event or action on cancel token requested)

编程入门 行业动态 更新时间:2024-10-26 03:38:17
请求取消令牌的任务事件或操作(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); } } }

我想知道如果存在任何方式使用事件(或一些行动),如果取消请求。 我的意思是我需要在_timeout过期的时刻正好执行SomeMethod()。 任何人都可以解释我:一般情况下可以吗?

This is my code:

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); } } }

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 :

注册将取消此CancellationToken时将被调用的委托。

注册一个这样的动作:

_cancelToken.Token.Register(() => DoStuff());

You're looking for CancellationToken.Register:

Registers a delegate that will be called when this CancellationToken is canceled.

Register an action like this:

_cancelToken.Token.Register(() => DoStuff());

更多推荐

本文发布于:2023-07-29 14:13:00,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1316796.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:令牌   事件   操作   Task   event

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!