gpt4 book ai didi

c# - IAsyncEnumerable 方法中的正确处置?

转载 作者:行者123 更新时间:2023-12-02 03:08:24 28 4
gpt4 key购买 nike

这个问题的答案可能是不可能,但问题是:假设您有一个 C# 方法来使用 TextReader 中的行返回 IAsyncEnumerable<string> .你如何确保什么时候DisposeAsyncIAsyncEnumerator<string> 上调用那TextReader被处置?或者这是您需要编写自定义实现来实现的东西吗?

最佳答案

只需在异步迭代器中使用一个 try-finally block ,或者更简单地使用一个 using block ,一旦调用者完成枚举,TextReader 就会被释放.枚举是正常完成还是由于异常或中断而过早完成都无关紧要。

static async Task Main(string[] args)
{
await foreach (var line in GetLines())
{
Console.WriteLine(line);
}
}

private static async IAsyncEnumerable<string> GetLines()
{
var reader = new StringReader("Line1\nLine2\nLine3");
try
{
while (true)
{
var line = await reader.ReadLineAsync();
if (line == null) break;
yield return line;
}
}
finally
{
reader.Dispose();
Console.WriteLine("Disposed");
}
}

输出:

Line1
Line2
Line3
Disposed

关于c# - IAsyncEnumerable 方法中的正确处置?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58345318/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com