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 拥有的GeneratorInitializationContextGeneratorExecutionContext,以帮助我们做出执行决定。 我的问题是,CancellationToken 什么时候会被 取消 ?构建过程何时中断?或者如果我想手动取消 CancellationToken 怎么办?

谢谢!

【问题讨论】:

一般来说,如果您不拥有取消令牌,您不应该自己去触发它;您可以生成自己的取消令牌并使用CancellationTokenSource.CreateLinkedTokenSource 创建一个新令牌,该令牌将在其中任何一个被绊倒时取消。 【参考方案1】:

您的生成器也在 Visual Studio IDE 中运行,以提供实时智能感知;如果您对文件进行了一些更改,我们会取消之前运行生成器的请求并重新开始运行生成器。因此,表现良好的生成器应该观察到取消并中止生成,这样您就不会占用额外的 CPU 时间。

【讨论】:

以上是关于C#源码生成器的cancellationtoken啥时候取消?的主要内容,如果未能解决你的问题,请参考以下文章

C# CancellationToken 如何与 SqlConnection.OpenAsync(token) 一起使用?

我应该何时调用 CancellationToken.ThrowIfCancellationRequested?

我应该如何使用 DataflowBlockOptions.CancellationToken?

C#使用Xamarin开发可移植移动应用进阶篇(8.打包生成安卓APK并精简大小),附源码

如何取消 CancellationToken

如何使用 CancellationToken 属性?