当前位置: 首页 > news >正文

网站建设心得体会500字西安网站建设 招聘

网站建设心得体会500字,西安网站建设 招聘,wordpress模板推荐,网站开发工程师培训在异步函数中#xff0c;一般使用CancellationToken来控制函数的执行。这个Token需要作为参数传递到异步函数中#xff1a; public staic TaskT DoAsync(CancellationToken token) {... } 那么如果一个异步函数没有这个Token参数#xff0c;如何取消呢? 之前看到一…        在异步函数中一般使用CancellationToken来控制函数的执行。这个Token需要作为参数传递到异步函数中 public staic TaskT DoAsync(CancellationToken token) {... } 那么如果一个异步函数没有这个Token参数如何取消呢? 之前看到一个博客How to Cancel a Non-Cancellable Task in C# 1.构建取消异步函数的扩展方法 先上代码 public static class TaskExtensions{public static async TaskT WithCancellationT (this TaskT task,CancellationToken cancellationToken){var tcsnew TaskCompletionSourceobject(TaskCreationOptions.RunContinuationsAsynchronously);using (cancellationToken.Register(state {((TaskCompletionSourceobject)state!).TrySetResult(null!);}, tcs)){var resultTask await Task.WhenAny(task, tcs.Task);if(resultTasktcs.Task){throw new OperationCanceledException(cancellationToken);}return await task;}}} 显然这是一个扩展方法旨在为TaskT类型扩展一个名叫WithCancellation函数。这个函数会有一个CancellationToken,但这个Token不是传递给任务参数task(也就是我们要取消的函数)的而是用于外部控制。 代码中首先构建了一个异步任务利用TaskCompletionSourceT可以构建一个用于控制原任务的异步任务这里的TaskCompletionSource不多解释了可以参考博客here。然后通过传入的Token注册一个回调函数回调函数传入的参数就是刚刚创立的TaskCompletionSourceT对象回调函数会调用成员函数TrySetResult()给任务赋值。而回调函数的执行则是在Token被取消时触发。 2. 测试 然后我们使用这个扩展方法构建实例 internal class CancelTaskWithoutCancellationToken{private static readonly CancellationTokenSource cancellationTokenSource new CancellationTokenSource();public static async Task Test(){try{var result await Task.Run(async () {await Task.Delay(TimeSpan.FromSeconds(5));Console.WriteLine(操作完成);await Task.Delay(300);Console.WriteLine(还继续吗);return 7;}).WithCancellation(cancellationTokenSource.Token);Console.WriteLine(result.ToString());}catch (Exception ex){Console.WriteLine(ex.Message);Console.WriteLine(任务取消了);}finally{cancellationTokenSource.Dispose();}}public static void Cancel(){cancellationTokenSource?.Cancel();}} 测试代码 var t1CancelTaskWithoutCancellationToken.Test(); var t2 Task.Run(() {Thread.Sleep(1000);CancelTaskWithoutCancellationToken.Cancel(); }); await Task.WhenAll(t1, t2); 运行结果如下 好像结果很符合预期。 假设测试代码后面还有一些任务要运行也就是主线程没那么快结束呢让我们在测试代码后面加一行 var t1CancelTaskWithoutCancellationToken.Test(); var t2 Task.Run(() {Thread.Sleep(1000);CancelTaskWithoutCancellationToken.Cancel(); }); await Task.WhenAll(t1, t2); Console.WriteLine(----------------------); Console.ReadLine(); 运行结果 Oh No原来的任务还是执行了说明没能阻止那个任务继续运行所以原博客说取消一个不能被取消的任务non-cancelable是错的开工没有回头箭。但是从前面的例子我们可以取消等待那个任务。 实际上博主在另外一篇博客找到了关于这个问题的说明 How do I cancel non-cancelable async operations? 博主在最后总结 So, can you cancel non-cancelable operations? No.  Can you cancel waits on non-cancelable operations?  Sure… just be very careful when you do. 所以如果想能随时取消一个Task,最稳妥的办法还是将Token作为参数传递进去
http://www.huolong8.cn/news/175250/

相关文章:

  • 华文细黑做网站有版权吗公司免费注册
  • 网站优化标签成都本地做网站的
  • 店招搜索栏在那个网站上可以做wordpress怎么代码高亮
  • 厦门哪家网站建设最好提供网站建设备案
  • 网站如何开通支付功能怎么做网站的站点地图
  • 做网站运营需要培训吗怎样找竞争对手网站
  • 兰州网站建设平台分析网站内容转载
  • 搜狗做网站怎么样北京企业网站建设方案
  • a032网站模版深圳网站建设信科网络
  • 官网网站设计政协机关网站建设
  • 阜阳集团网站建设免费建网站的app
  • 怎么做微课网站网游开发
  • 东莞网站建设优化方案wordpress相册代码
  • 怎么在wordpress免费注册博客网站wordpress炫酷主题
  • 排名好的徐州网站建设网页设计项目案例网站
  • 青岛做网站推广公司网站建设全流程
  • 网站备案期间怎么做凡科建站电脑版网址
  • 做购物网站的数据库做网站用什么软件
  • 建站个人网站彩票网站建设与推广
  • 百家号淄博圻谷网站建设网易企业邮箱属于什么类型
  • 天津网站推广¥做下拉去118cr社区电商小程序模板包含哪些
  • 山西做二级建筑资料在哪个网站吴中seo外链推广工具
  • 知名网站定制公司电话国外英文网站
  • 如何做设计网站页面设计南京高新区建设规划局网站
  • FLASK做wiki网站网站开发需要哪些条件
  • 哈尔滨网站建设价位湖南网站建设公司 都来磐石网络
  • 电商专业培训网站建设自贡网站推广
  • 银川网站建设nx110网站换空间商什么意思
  • 中山网站建设文化效果做网站制作一般多少钱
  • 工程建设资料员报名网站如何做影视网站的标题