Пример #1
0
        public void TestAddingContextToEachMethod()
        {
            TraceParameterProvider.Default.For <IHaveRichContext>()
            .AddContextData <string>("Site.Id")
            .AddContextData <string>("Site.Name")
            .AddContextData <int>("PID");

            var proxy = EventSourceImplementer.GetEventSourceAs <IHaveRichContext>();

            EnableLogging(proxy);

            using (var context = TraceContext.Begin())
            {
                context["PID"] = 1234;

                using (var context2 = TraceContext.Begin())
                {
                    context2["Site.Id"]   = "Ts1";
                    context2["Site.Name"] = "TestSite1";

                    proxy.Log("message");
                }
            }

            // look at the events
            var events = Listener.Events.ToArray();

            Assert.AreEqual(1, events.Length);
            Assert.AreEqual(4, events[0].Payload.Count);
            Assert.AreEqual("message", events[0].Payload[0]);
            Assert.AreEqual("Ts1", events[0].Payload[1]);
            Assert.AreEqual("TestSite1", events[0].Payload[2]);
            Assert.AreEqual(1234, events[0].Payload[3]);
        }
Пример #2
0
        public async Task <IDistributedLock> CreateLockAsync(string name, TimeSpan expiry, TimeSpan wait, TimeSpan retry, CancellationToken cancellationToken, Action expirationAction = null)
        {
            IDistributedLock result = null;
            PeriodicAction   timer  = null;

            timer = new PeriodicAction(async ct =>
            {
                var dlock = await TryAquireLock(name, expiry, expirationAction);
                if (dlock != null)
                {
                    result = dlock;
                    timer?.Stop();
                }
            }, Convert.ToInt32(retry.TotalMilliseconds), wait);
            cancellationToken.Register(() => timer.Stop());
            using (var scope = TraceContext.Begin())
            {
                _logger.TraceVerboseEvent($"Starting trying to acquire lock {name} for {wait} each {retry}");
                await timer.Start();

                return(result ?? new EfDistributedLock(name));
            }
        }