gpt4 book ai didi

c# - 如何限制通过并行任务库运行的事件任务的数量?

转载 作者:太空狗 更新时间:2023-10-29 18:20:18 29 4
gpt4 key购买 nike

我有一些包含 Action (System.Action) 的 ConcurrentQueue。此队列中的每个操作都需要运行(需要使用 invoke 调用)。

当队列不为空时 => 需要调用操作 => 但是我想对将运行的并行任务的数量进行一些限制。除此之外,可以随时将新操作添加到队列中。

怎么做?

(使用.net 4.0)

我写了一些东西,但我不确定这是最好的方法

 SemaphoreSlim maxThread = new SemaphoreSlim(5);

while( !actionQueue.IsEmpty )
{
maxThread.Wait();
Task.Factory.StartNew( () =>
{
Action action;
if( actionExecution.TryDequeue( out action) )
{
action.Invoke();
}
},
TaskCreationOptions.LongRunning ).ContinueWith( ( task ) => maxThread.Release() );
}
}

最佳答案

查看 MSDN 文章 How to: Create a Task Scheduler That Limits Concurrency .您可以使用它的 LimitedConcurrencyLevelTask​​Scheduler 实现来使您的代码如下:

var scheduler = new LimitedConcurrencyLevelTaskScheduler(5);
TaskFactory factory = new TaskFactory(scheduler);

while( !actionQueue.IsEmpty )
{
factory.StartNew( () =>
{
Action action;
if(actionExecution.TryDequeue(out action))
action.Invoke();

}, TaskCreationOptions.LongRunning);
}

关于c# - 如何限制通过并行任务库运行的事件任务的数量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17674184/

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