惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
MongoDB | Blog
MongoDB | Blog
博客园_首页
博客园 - 三生石上(FineUI控件)
博客园 - 聂微东
B
Blog RSS Feed
D
Docker
IT之家
IT之家
大猫的无限游戏
大猫的无限游戏
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
阮一峰的网络日志
阮一峰的网络日志
罗磊的独立博客
Recent Announcements
Recent Announcements
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
A
About on SuperTechFans
The GitHub Blog
The GitHub Blog
G
Google Developers Blog
V
V2EX
量子位
雷峰网
雷峰网
月光博客
月光博客
云风的 BLOG
云风的 BLOG
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
T
Tailwind CSS Blog

博客园 - I'm CY

Graphviz(02) 汉字subgraph不显示汉字的处理 Graphviz(01) notepad++ Run xxx.gv How to design a product table for many kinds of product where each product has many parameters MVVM ICommand.CanExecute parameter is null 使用ContentPresenter,不使用ContentControl Code First ef SQL Server 版本不支持数据类型“datetime2” 'System.ValueTuple, Version=0.0.0.0 required for Add-Migration on .NET 4.6.1 Class Library LDAP 相关链接 .NET WCF Return String 字符串有反斜杠的处理 word2010多级列表编号为什么会变成黑块 C# javascript 采用 RSA 加密解密 [LINK]List of .NET Dependency Injection Containers (IOC) 转:javascript判断IE浏览器 How to: Cancel a Task and Its Children Exception has been thrown by the target of an invocation C#、IronPython、PowerShell 简单设计 大杀器 Linq手动添加EntitySet关系需要注意的地方
How to:Aborting a long running task in TPL
I'm CY · 2013-11-14 · via 博客园 - I'm CY

http://social.msdn.microsoft.com/Forums/vstudio/en-US/d0bcb415-fb1e-42e4-90f8-c43a088537fb/aborting-a-long-running-task-in-tpl?forum=parallelextensions

I hesitate to show this :), but if you really did want to use aborts, you could do something like:

    int Foo(CancellationToken token)
    {
        Thread t = Thread.CurrentThread;
        using (token.Register(t.Abort))
        {
            // compute-bound work here
        }
    }

Then, if the token receives a cancellation request, it'll translate that into an abort on the thread running the compute-bound work.  Of course, it'd be better if the "crunchy" operation were written to monitor the token, checking its IsCancellationRequest property or calling ThrowIfCancellationRequested every once in a while.  This is what methods like Parallel.For and PLINQ do, and it provides for a nice cooperative cancellation mechanism whereby the caller can still be terminated in a timely fashion, but it can do so at a particular point when it's safe.

I hope that helps.