gpt4 book ai didi

c# - 如果我没有完成ActionBlock会不会有问题

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

我正在尝试使用操作块来执行一些任务。我的问题是什么时候CreateActionBlock()方法结束,ActionBlock仍在处理数据。由于该方法已返回并且我无法调用 actionBlock.Complete() .如果我运行这个 CreateActionBlock() 会不会引起任何问题?千次?内存中会永远有数千个 actionBlocks 还是在处理 5 个输入后会被 GC 处理?

private static async Task Dequeue(string content)
{
Console.WriteLine("The string is " + content);
await Task.Delay(10000);
}

public static void CreateActionBlock()
{
var actionBlock = new ActionBlock<string>(
(e) => Dequeue(e),
new ExecutionDataflowBlockOptions()
{
BoundedCapacity = 5,
MaxDegreeOfParallelism = 1
});

for (int i = 0; i < 5; i++)
{
actionBlock.Post(i.ToString());
}
}

最佳答案

一旦数据流块的输入队列被清空,并且当前处于空闲状态,它就有资格进行垃圾回收。下面是一个演示此行为的示例:

var weakReference = InnerMethod();
for (int i = 1; i <= 10; i++)
{
Thread.Sleep(100);
GC.Collect();
Console.WriteLine($"IsAlive: {weakReference.IsAlive}");
}

WeakReference InnerMethod()
{
var block = new ActionBlock<int>(n =>
{
Thread.Sleep(200);
Console.WriteLine($"Processed: {n}");
});
block.Post(1); block.Post(2); block.Post(3);
return new WeakReference(block);
}
输出:
IsAlive: True
Processed: 1
IsAlive: True
IsAlive: True
Processed: 2
IsAlive: True
IsAlive: True
Processed: 3
IsAlive: False
IsAlive: False
IsAlive: False
IsAlive: False
IsAlive: False
( Try it on Fiddle )

关于c# - 如果我没有完成ActionBlock会不会有问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66259044/

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