예제 #1
0
 public EventLogStorage(
     EventLogStorageOptions options,
     IJsonSerializerFacade jsonSerializerFacade,
     ILocalFileSystem?localFileSystem = default,
     ISystemClock?systemClock         = default
     )
 {
     this._BaseFolder           = options.BaseFolder;
     this._JsonSerializerFacade = jsonSerializerFacade;
     this._LocalFileSystem      = localFileSystem ?? new LocalFileSystem();
     this._SystemClock          = systemClock ?? new SystemClock();
     this._LastWrite            = AsyncQueue.Create();
 }
예제 #2
0
        static void Main()
        {
            var settings = AsyncQueueSetting.Create(2, 5, 1);
            var logger   = new ConsoleLogger();

            var queue = AsyncQueue.Create <string>(settings, logger)
                        .From(CreateMessage, TimeSpan.Zero)
                        .Distinct(StringComparer.OrdinalIgnoreCase)
                        .Handle(context => Console.WriteLine(context.Message))
                        .Start();

            Console.WriteLine("队列已开始运行,按任意键退出");
            Console.ReadKey();
            queue.Stop();
        }
예제 #3
0
        static void Main(string[] args)
        {
            var queue  = AsyncQueue.Create <string>();
            var source = new CancellationTokenSource();
            var token  = source.Token;

            queue.Enqueue("1").Wait();
            queue.Enqueue("2").Wait();
            queue.Enqueue("3").Wait();
            queue.Enqueue("4").Wait();
            queue.Enqueue("5").Wait();
            queue.Enqueue("6").Wait();
            queue.Enqueue("7").Wait();
            queue.MaxCapacity  = 2;
            queue.OverflowRule = OverflowRule.DiscardFirst;
            queue.Enqueue("8").Wait();



            var senders   = Enumerable.Range(0, 3).Select(index => new Sender(index, queue, (ConsoleColor)(index + 13))).ToArray();
            var receivers = Enumerable.Range(0, 10).Select(index => new Receiver(index, queue, (ConsoleColor)(index + 5))).ToArray();

            Parallel.ForEach(receivers, async x => await x.Receive(token));

            Thread.Sleep(1000);
            var message = 0;

            Parallel.ForEach(senders, async x =>
            {
                for (var i = 0; i < 2000; i++)
                {
                    await x.Send(Interlocked.Increment(ref message).ToString());
                }
            });
            Console.ReadLine();
            source.Cancel();
            Console.ReadLine();
        }