The module subscribed to TaskScheduler.UnobservedTaskException to send exceptions to ApplicationInsights.
Inheritance: ITelemetryModule, IDisposable
        public void InitializeCallsRegisterOnceThreadSafe()
        {
            int count = 0;

            Task[] tasks = new Task[50];

            using (var module = new UnobservedExceptionTelemetryModule(
                       _ => ++ count,
                       _ => { }))
            {
                for (int i = 0; i < 50; ++i)
                {
#if NET40
                    tasks[i] = System.Threading.Tasks.TaskEx.Run(() => module.Initialize(this.moduleConfiguration));
#else
                    tasks[i] = System.Threading.Tasks.Task.Run(() => module.Initialize(this.moduleConfiguration));
#endif
                }

#if NET40
                System.Threading.Tasks.TaskEx.WhenAll(tasks).Wait();
#else
                System.Threading.Tasks.Task.WhenAll(tasks).Wait();
#endif
            }

            Assert.Equal(1, count);
        }
        public void InitializeCallsRegister()
        {
            EventHandler<UnobservedTaskExceptionEventArgs> handler = null;
            using (var module = new UnobservedExceptionTelemetryModule(
                h => handler = h,
                _ => { }))
            {
                module.Initialize(this.moduleConfiguration);
            }

            Assert.NotNull(handler);
        }
        public void TrackedExceptionsHavePrefixUsedForTelemetry()
        {
            EventHandler<UnobservedTaskExceptionEventArgs> handler = null;
            using (var module = new UnobservedExceptionTelemetryModule(
                h => handler = h,
                _ => { }))
            {
                module.Initialize(this.moduleConfiguration);
                handler.Invoke(null, new UnobservedTaskExceptionEventArgs(new AggregateException(string.Empty)));
            }

            Assert.True(this.items[0].Context.GetInternalContext().SdkVersion.StartsWith("unobs: ", StringComparison.OrdinalIgnoreCase));
        }
        public void TrackedExceptionsHaveMessageFromException()
        {
            EventHandler<UnobservedTaskExceptionEventArgs> handler = null;
            using (var module = new UnobservedExceptionTelemetryModule(
                h => handler = h,
                _ => { }))
            {
                module.Initialize(this.moduleConfiguration);
                handler.Invoke(null, new UnobservedTaskExceptionEventArgs(new AggregateException("Test")));
            }

            Assert.Equal("Test", ((ExceptionTelemetry)this.items[0]).Exception.Message);
        }
        public void InitializeCallsRegisterOnce()
        {
            int count = 0;

            using (var module = new UnobservedExceptionTelemetryModule(
                _ => ++count,
                _ => { }))
            {
                module.Initialize(this.moduleConfiguration);
            }

            Assert.Equal(1, count);
        }
        public void InitializeCallsRegisterOnce()
        {
            int count = 0;

            using (var module = new UnobservedExceptionTelemetryModule(
                       _ => ++ count,
                       _ => { }))
            {
                module.Initialize(this.moduleConfiguration);
            }

            Assert.Equal(1, count);
        }
        public void InitializeCallsRegister()
        {
            EventHandler <UnobservedTaskExceptionEventArgs> handler = null;

            using (var module = new UnobservedExceptionTelemetryModule(
                       h => handler = h,
                       _ => { }))
            {
                module.Initialize(this.moduleConfiguration);
            }

            Assert.NotNull(handler);
        }
        public void TrackedExceptionsHaveMessageFromException()
        {
            EventHandler <UnobservedTaskExceptionEventArgs> handler = null;

            using (var module = new UnobservedExceptionTelemetryModule(
                       h => handler = h,
                       _ => { }))
            {
                module.Initialize(this.moduleConfiguration);
                handler.Invoke(null, new UnobservedTaskExceptionEventArgs(new AggregateException("Test")));
            }

            Assert.Equal("Test", ((ExceptionTelemetry)this.items[0]).Exception.Message);
        }
        public void TrackedExceptionsHavePrefixUsedForTelemetry()
        {
            EventHandler <UnobservedTaskExceptionEventArgs> handler = null;

            using (var module = new UnobservedExceptionTelemetryModule(
                       h => handler = h,
                       _ => { }))
            {
                module.Initialize(this.moduleConfiguration);
                handler.Invoke(null, new UnobservedTaskExceptionEventArgs(new AggregateException(string.Empty)));
            }

            Assert.True(this.items[0].Context.GetInternalContext().SdkVersion.StartsWith("unobs: ", StringComparison.OrdinalIgnoreCase));
        }
        public void TrackedExceptionsHavePrefixUsedForTelemetry()
        {
            string expectedVersion = SdkVersionHelper.GetExpectedSdkVersion(typeof(UnobservedExceptionTelemetryModule), prefix: "unobs:");

            EventHandler <UnobservedTaskExceptionEventArgs> handler = null;

            using (var module = new UnobservedExceptionTelemetryModule(
                       h => handler = h,
                       _ => { }))
            {
                module.Initialize(this.moduleConfiguration);
                handler.Invoke(null, new UnobservedTaskExceptionEventArgs(new AggregateException(string.Empty)));
            }

            Assert.Equal(expectedVersion, this.items[0].Context.GetInternalContext().SdkVersion);
        }
        public void InitializeCallsRegisterOnceThreadSafe()
        {
            int count = 0;

            Task[] tasks = new Task[50];

            using (var module = new UnobservedExceptionTelemetryModule(
                _ => ++count,
                _ => { }))
            {
                for (int i = 0; i < 50; ++i)
                {
                    tasks[i] = TaskEx.Run(() => module.Initialize(this.moduleConfiguration));
                }

                TaskEx.WhenAll(tasks).Wait();
            }

            Assert.Equal(1, count);
        }
        public void TrackedExceptionsHavePrefixUsedForTelemetry()
        {
            string expectedVersion = SdkVersionHelper.GetExpectedSdkVersion(typeof(UnobservedExceptionTelemetryModule), prefix: "unobs:");

            EventHandler<UnobservedTaskExceptionEventArgs> handler = null;
            using (var module = new UnobservedExceptionTelemetryModule(
                h => handler = h,
                _ => { }))
            {
                module.Initialize(this.moduleConfiguration);
                handler.Invoke(null, new UnobservedTaskExceptionEventArgs(new AggregateException(string.Empty)));
            }

            Assert.Equal(expectedVersion, this.items[0].Context.GetInternalContext().SdkVersion);
        }