gpt4 book ai didi

c# - 我如何异步处理消息,在处理时丢弃任何新消息?

转载 作者:行者123 更新时间:2023-11-30 16:34:42 25 4
gpt4 key购买 nike

我有一个 C# 应用程序,它订阅了我们消息系统上的一个主题以获取值更新。当一个新值进来时,我会做一些处理然后继续。问题是,更新的速度可能快于应用程序处理它们的速度。我想做的是保持最新的值(value),所以我不想排队。例如,源发布值“1”,我的应用程序接收它;在处理时,源在我的应用程序完成处理之前发布序列 (2、3、4、5);然后我的应用程序处理值“5”,并丢弃先前的值。

发布工作代码示例有点困难,因为它基于专有的消息传递库,但我认为这是一种常见模式,我只是不知道它叫什么......似乎是处理功能必须在与消息回调不同的线程上运行,但我不确定如何组织它,例如如何通知该线程值更改。关于我需要做什么的任何一般提示?

最佳答案

一个非常简单的方法可能是这样的:

private IMessage _next;

public void ReceiveMessage(IMessage message)
{
Interlocked.Exchange(ref _next, message);
}

public void Process()
{
IMessage next = Interlocked.Exchange(ref _next, null);

if (next != null)
{
//...
}
}

关于c# - 我如何异步处理消息,在处理时丢弃任何新消息?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2364260/

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