gpt4 book ai didi

c# - Disruptor.NET 示例

转载 作者:IT王子 更新时间:2023-10-29 04:24:31 26 4
gpt4 key购买 nike

我正在尝试学习如何使用 Disruptor.NET 消息传递框架,但找不到任何实用示例。那里有很多带有图片的文章,说明它是如何工作的,但我找不到任何地方可以实际向您展示如何实现这些方法。什么是示例?

最佳答案

因为无法为 Disruptor-net 找到一个可行的“Hello World”而感到沮丧,我四处寻找直到找到一个可用的 - 见下文。希望这是不言自明的。 Console.WriteLine 行可以方便地查看事物的运行方式 - 例如,RingBuffer 在启动时创建每个条目实例(这是有道理的)。

希望这对寻求 .NET 上 Disruptor 帮助的任何人有所帮助。

using System;
using System.Linq;
using System.Threading;
using System.Threading.Tasks;
using Disruptor;
using Disruptor.Dsl;

namespace DisruptorTest
{
public sealed class ValueEntry
{
public long Value { get; set; }

public ValueEntry()
{
Console.WriteLine("New ValueEntry created");
}
}

public class ValueAdditionHandler : IEventHandler<ValueEntry>
{
public void OnNext(ValueEntry data, long sequence, bool endOfBatch)
{
Console.WriteLine("Event handled: Value = {0} (processed event {1}", data.Value, sequence);
}
}

class Program
{
private static readonly Random _random = new Random();
private static readonly int _ringSize = 16; // Must be multiple of 2

static void Main(string[] args)
{
var disruptor = new Disruptor.Dsl.Disruptor<ValueEntry>(() => new ValueEntry(), _ringSize, TaskScheduler.Default);

disruptor.HandleEventsWith(new ValueAdditionHandler());

var ringBuffer = disruptor.Start();

while (true)
{
long sequenceNo = ringBuffer.Next();

ValueEntry entry = ringBuffer[sequenceNo];

entry.Value = _random.Next();

ringBuffer.Publish(sequenceNo);

Console.WriteLine("Published entry {0}, value {1}", sequenceNo, entry.Value);

Thread.Sleep(250);
}
}
}
}

关于c# - Disruptor.NET 示例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8860684/

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