检查频道是否还包含某种类型的任务

问题描述 投票:0回答:1

我正在使用 .NET Channels 向其中添加作业,并以消费者、生产者的方式处理它们。

但是,有时检查某种工作是否仍在“管道”中可能会很方便?

是否可以检查满足某些条件的对象是否仍在通道内?

可以说这是通道内对象的类型:

public class MyJob
{
     public string Id {get; set; }
     public string Type {get; set; }
     ...
}

然后是我的任务队列:

Channel<MyJob> _queue;

我现在想检查(而不是修改!!!)_queue 是否有某种类型的作业在管道内。

类似这样的:

var kindExists = _queue.Reader.Where(j => j.Type == "MASTER").ToList();
if(kindExists)  ...

我看到可以使用 _queue.Reader.PeekAsync“查看”作业,但我不确定这是否是正确的做法。

c# .net
1个回答
0
投票

这应该有效:

ValueTask<bool> kindExistsTask = _queue.Reader.ReadAllAsync()
    .AnyAsync(j => j.Type == "MASTER");
bool kindExists = kindExistsTask.GetAwaiter().GetResult();
if (kindExists)
{ 
    // ...  
}
© www.soinside.com 2019 - 2024. All rights reserved.