代码检查:异步迭代器包含一个或多个类型为 'CancellationToken' 的参数,但这些参数都没有标注 'EnumeratorCancellation' 特性。
此检查报告一个异步迭代器方法包含 CancellationToken 参数,但没有用 [EnumeratorCancellation] 标记任何此类参数。 没有该特性时,由 await foreach 通过 GetAsyncEnumerator(...) 传递的取消标记不会转发到你可能想要用的迭代器参数。
示例
using System.Collections.Generic;
using System.Threading;
class C
{
public async IAsyncEnumerable<int> M(CancellationToken token)
{
yield return 0;
}
}
using System.Collections.Generic;
using System.Runtime.CompilerServices;
using System.Threading;
class C
{
public async IAsyncEnumerable<int> M([EnumeratorCancellation] CancellationToken token)
{
yield return 0;
}
}
快速修复
快速修复会为所选 CancellationToken 参数添加 [EnumeratorCancellation] 特性。
2026年 5月 8日