小编Hom*_*vas的帖子

使用 EnumeratorCancellation 返回 AsyncEnumerable 或循环 WithCancellation 有什么区别

我有以下方法可以从 http 流中读取 csv 文档

public async IAsyncEnumerable<Line> GetLines([EnumeratorCancellation] CancellationToken cancellationToken)
{
    HttpResponseMessage response = GetResponse();

    using var responseStream = await response.Content.ReadAsStreamAsync();
    using var streamReader = new StreamReader(responseStream);
    using var csvReader = new CsvReader(streamReader);

    while (!cancellationToken.IsCancellationRequested && await csvReader.ReadAsync())
    {
        yield return csvReader.GetRecord<Line>();
    }
}
Run Code Online (Sandbox Code Playgroud)

以及其他地方使用结果的方法

var documentAsyncEnumerable = graphClient.GetLines(cancellationToken);
await foreach (var document in documentAsyncEnumerable.WithCancellation(cancellationToken))
{
    // Do something with document    
}
Run Code Online (Sandbox Code Playgroud)

我的问题是我应该在一个地方使用取消令牌吗?应该在产生记录之前对取消令牌采取行动还是 IAsyncEnumerable.WithCancellation() 基本上做同样的事情?如果有的话有什么区别?

c# .net-core c#-8.0 iasyncenumerable

12
推荐指数
2
解决办法
2857
查看次数

标签 统计

.net-core ×1

c# ×1

c#-8.0 ×1

iasyncenumerable ×1