我想知道在向本地函数传递取消令牌时是否需要使用EnumeratorCancellation
.我正在考虑将来经常使用这种代码模式:
public static IAsyncEnumerable<string> MyOuterFunctionAsync(
this Client client,
CancellationToken cancellationToken,
int? limit = null)
{
return MyLocalFunction().
TakeWhile(
(_, index) =>
limit is null ||
index < limit.Value);
async IAsyncEnumerable<string> MyLocalFunction()
{
var request = CreateRequest();
do
{
var page = await request.GetAsync(cancellationToken);
foreach (var item in page)
{
yield return item;
}
request = GetNextPageRequest();
}
while (request is not null)
}
}
ReSharper没有提到需要EnumeratorCancellation
,当我试图将它添加到外部函数时,它说它不会有任何影响,但如果我try 将它添加到本地函数,ReSharper会很高兴,就像没有.我应该在任何地方使用它吗?
我判断了IL查看器,但我看不出版本之间有任何区别.
MyOuterFunctionAsync能否正常工作?我是否需要将MyLocalFunction签名更改为
async IAsyncEnumerable<string> MyLocalFunction(
[EnumeratorCancellation] CancellationToken cancellationToken)