gpt4 book ai didi

wcf - C# ConcurrentQueue - Enqueue 发生时引发事件?

转载 作者:行者123 更新时间:2023-12-01 12:52:35 25 4
gpt4 key购买 nike

我有一个托管在 Windows 服务中的 WCF 服务。

WCF 服务注入(inject)了 ConcurrentQueue<SomeClass> .

Windows 服务(承载 WCF 服务)也注入(inject)了 ConcurrentQueue<SomeClass> .

Windows 服务启动 WCF 服务,并产生一个工作线程。

工作线程推送 Enqueue 的 ( SomeClass ) 对象到ConccurrentQueue .

我想以某种方式在对象排队到 ConcurrentQueue 时触发 WCF 服务。以便它可以将其(以及可能在队列中的任何其他对象)出列,并向所有连接的客户端发送消息。

.

两个问题:

  • 如何使 WCF 服务“ Hook ”注入(inject)的 ConccurentQueue 的“入队”方法,以便在将对象插入队列时 - WCF 服务会对此做些什么?
  • 如果我设法以某种方式 Hook “入队”事件,现在 Windows 服务中的工作线程已入队 两个 对象进入队列——这意味着它也会“触发”两次 WCF 服务的“入队钩子(Hook)”——这两个触发的事件会发生在不同的线程中吗?我需要以某种方式确保 WCF 服务按顺序从队列中提取对象。我不想突然看到对于每个 Enqueue 操作 - WCF 服务在单独的线程中触发并拉出对象...

  • 我希望我的问题足够清楚......

    .

    [更新]

    与 Chris 聊天后,我得出的结论是,最好的方法是将工作线程与 WCF 服务分开,并让工作线程作为客户端调用 WCF 服务。这意味着我不必摆弄队列。

    最佳答案

    将 ConcurrentQueue 包装在一个简单的类中,该类公开 Enqueue 和 Dequeue 调用,然后将您的钩子(Hook)放在此类中。每当调用 YourClass.Enqueue 时,触发 WCF 事件,该事件可以调用 YourClass.Dequeue。 YourClass.Dequeue 将排空队列并将其放入 WCF 服务可以按顺序处理的有序枚举中。

    关于wcf - C# ConcurrentQueue - Enqueue 发生时引发事件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11313018/

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