C#源码生成器的cancellationtoken啥时候取消?
Posted
技术标签:
【中文标题】C#源码生成器的cancellationtoken啥时候取消?【英文标题】:When will cancellationtoken of C# source generator be canceled?C#源码生成器的cancellationtoken什么时候取消? 【发布时间】:2021-03-18 22:40:09 【问题描述】:Source generator
是这个 .NET 5 版本中 Roslyn 的一个很棒的功能,
通过实现ISourceGenerator
,您可以获得这样的结果。
[Generator]
class OtherGenerator : ISourceGenerator
public void Initialize(GeneratorInitializationContext context)
public void Execute(GeneratorExecutionContext context)
这是CancellationToken
拥有的GeneratorInitializationContext
和GeneratorExecutionContext
,以帮助我们做出执行决定。
我的问题是,CancellationToken
什么时候会被 取消 ?构建过程何时中断?或者如果我想手动取消 CancellationToken 怎么办?
谢谢!
【问题讨论】:
一般来说,如果您不拥有取消令牌,您不应该自己去触发它;您可以生成自己的取消令牌并使用CancellationTokenSource.CreateLinkedTokenSource
创建一个新令牌,该令牌将在其中任何一个被绊倒时取消。
【参考方案1】:
您的生成器也在 Visual Studio IDE 中运行,以提供实时智能感知;如果您对文件进行了一些更改,我们会取消之前运行生成器的请求并重新开始运行生成器。因此,表现良好的生成器应该观察到取消并中止生成,这样您就不会占用额外的 CPU 时间。
【讨论】:
以上是关于C#源码生成器的cancellationtoken啥时候取消?的主要内容,如果未能解决你的问题,请参考以下文章
C# CancellationToken 如何与 SqlConnection.OpenAsync(token) 一起使用?
我应该何时调用 CancellationToken.ThrowIfCancellationRequested?
我应该如何使用 DataflowBlockOptions.CancellationToken?