代码检查:异步迭代器包含一个或多个类型为 '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;
}
}
快速修复
快速修复会将 [EnumeratorCancellation] 属性添加到所选的 CancellationToken 参数。
2026年 5月 8日