gpt4 book ai didi

c# - 在 C# 中的 IAsyncEnumerable 线程安全中增加一个整数吗?

转载 作者:行者123 更新时间:2023-12-04 08:20:36 26 4
gpt4 key购买 nike

我正在使用最新的 IAsyncEnumerable C#中的功能并具有以下代码:

private async Task KeepStreaming()
{
int someCounter = 0;

await foreach(var item in _someService.ReadAllAsync())
{
someCounter++;
// skipped rest of the logic for brevity
}
}
增加计数器时是否需要担心线程安全?
如果 _someService.ReadAllAsync()怎么样?被替换为 _someChannel.Reader.ReadAllAsync()假设 channel 创建如下:
Channel<Foo> _someChannel = Channel.CreateUnbounded<Foo>(
new UnboundedChannelOptions {
AllowSynchronousContinuations = false,
SingleReader = true,
SingleWriter = false
});

最佳答案

是的,它是安全的,不,您无需担心。
这完全是线程安全的,只要使用迭代器的代码不会通过并发访问迭代器来破坏任何使用预期(这需要明确地编写 - 意思是“不是 await foreach” - 并且将是错误的消费代码,而不是你的)。
明确地说(见评论) - 讨论中的变量在迭代器块内的范围内是相关的。如果它是实例上的一个字段,那么它可能存在线程安全问题。

关于c# - 在 C# 中的 IAsyncEnumerable 线程安全中增加一个整数吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65514839/

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