【发布时间】:2022-06-17 00:23:20
【问题描述】:
我试图理解cancellationToken是一个东西的“原因”,因为我的理解让我觉得它没用。
首先来自msdnhttps://docs.microsoft.com/fr-fr/dotnet/standard/parallel-programming/task-cancellation
问题1:在“B”处传递Token有什么意义,因为我们直接在“C”处使用全局变量(在“A”处声明) 问题 2:使用“CancellationTokenSource”对象有什么意义,因为一个简单的布尔值使工作变得像这样:
if(myBoolCancelRequested){
//...
throw new OperationCanceledException()
}
然后,还是来自 msdn https://docs.microsoft.com/fr-fr/dotnet/standard/parallel-programming/how-to-cancel-a-task-and-its-children 看来我必须将令牌传递给所有调用层次结构,这让我很沮丧。假设我有一个像这样的现有代码(在单独的文件和单独的类中)
main()
method1()
|->method2()
| |-> method3()
| | |-> DoSomeWork()
将 DomeSomeWork() 转换为可取消(如 msdn 建议)会影响所有代码:'(
我希望该框架能够提供强大的工具,例如(在 DoSomeWork 内部):
for (int i = 0; i <= maxIterations; i++)
{
// Do a bit of work. Not too much.
....
...
if(Thread.AmazingCurrent?.AmazingCancellationToken?.IsCancellationRequested)
{
Console.WriteLine("Task {0} cancelled", taskNum);
//----> **Decide if it's needed to throw exception or just break the loop**
}
问题 3:对 CancellationToken 机制背后的设计有何看法?
【问题讨论】:
-
请将帖子限制为每个帖子一个目标问题。
标签: c# cancellationtokensource