博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Task扩展方法取消操作
阅读量:4325 次
发布时间:2019-06-06

本文共 1650 字,大约阅读时间需要 5 分钟。

1     ///  2     /// 任务扩展,传入取消操作 3     ///  4     public static class TaskExtensionDemo 5     { 6         //因为没有非泛型的TaskCompleteSource类 7         private struct Void { } 8  9         public static async Task
WithCancellation
(this Task
originalTask, CancellationToken cancellationToken)10 {11 var cancelTask = new TaskCompletionSource
();12 13 // 注册一个将在取消此 System.Threading.CancellationToken 时调用的委托。14 using (cancellationToken.Register(t => ((TaskCompletionSource
)t).TrySetResult(new Void()), cancelTask))15 {16 Task any = await Task.WhenAny(originalTask, cancelTask.Task);17 18 if (any == cancelTask.Task)19 {20 cancellationToken.ThrowIfCancellationRequested();21 }22 }23 24 return await originalTask;25 }26 27 public static async Task Go()28 {29 //在指定的延迟(以毫秒为单位)后将被取消。30 var cts = new CancellationTokenSource(5000);31 var ct = cts.Token;32 33 try34 {35 Task
t = new Task
(() =>36 {37 //Task.Delay不阻塞线程,任务不会被取消(5秒后早执行完了)38 //Task.Delay(10000);39 40 //阻塞线程,10秒后收到取消通知41 Thread.Sleep(10000);42 return 0;43 });44 t.Start();45 46 //调用扩展方法取消任务47 await t.WithCancellation(ct);48 49 Console.WriteLine("Task completed");50 }51 catch (OperationCanceledException)52 {53 Console.WriteLine("Task cancelled");54 }55 }56 }

 

转载于:https://www.cnblogs.com/xuejietong/p/8971536.html

你可能感兴趣的文章
vue项目开发之v-for列表渲染的坑
查看>>
C# 输出流转化成输入流操作XML
查看>>
CSS外边距合并(塌陷/margin越界)
查看>>
Swift给每个开发者赢取500万的机会!不看一生后悔。
查看>>
UIView详解
查看>>
MSSQL如何将查询结果拼接成字符串
查看>>
20169217 《Linux内核原理与分析》 第十周作业
查看>>
20169217 2016-2017-2 《网络攻防实践》第四周学习总结
查看>>
MemCache在Windows下环境的搭建及启动
查看>>
<nginx.conf> nginx设置用户权限
查看>>
python实现redis三种cas事务操作
查看>>
同步异步与阻塞非阻塞
查看>>
C++ 安全单例模式总结
查看>>
bzoj4754: [Jsoi2016]独特的树叶
查看>>
toj 4069 简易统计
查看>>
【Unity】Update()和FixedUpdate()
查看>>
UNITY中有Timer
查看>>
[JSOI2010] 连通数
查看>>
二分和三分
查看>>
支付宝新漏洞引发恐慌,那如何关闭小额免密支付呢
查看>>