Skip to content

Signalr UnobservedTaskException #2960

@tnx247

Description

@tnx247

hello,
I handle TaskScheduler.UnobservedTaskException in Application_Start, and write to log by code:

TaskScheduler.UnobservedTaskException += (s, e) =>
            {
                e.SetObserved();
                e.Exception.Handle(t =>
                {
                    Logger.Error(t, "UnobservedTaskException");
                    return true;
                });
            };

Then when server in high load (about 3k connections opened), I sometimes receive logs, all of them are:

(>100 logs) System.ObjectDisposedException: Cannot access a disposed object.
Object name: 'System.Web.WebSockets.AspNetWebSocket'.
   at System.Web.WebSockets.AspNetWebSocket.get_State()
   at Microsoft.AspNet.SignalR.WebSockets.WebSocketHandler.IsClosedOrClosedSent(WebSocket webSocket)
   at Microsoft.AspNet.SignalR.WebSockets.WebSocketHandler.<<CloseAsync>b__6>d__8.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
   at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
   at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
   at Microsoft.AspNet.SignalR.Owin.OwinWebSocketHandler.<>c__DisplayClass1.<<RunWebSocketHandler>b__0>d__3.MoveNext()
(few logs) System.ObjectDisposedException: Cannot access a disposed object.
Object name: 'System.Web.WebSockets.AspNetWebSocket'.
   at System.Web.WebSockets.AspNetWebSocket.get_State()
   at Microsoft.AspNet.SignalR.WebSockets.WebSocketHandler.<<SendAsync>b__0>d__2.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
   at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
   at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
   at Microsoft.AspNet.SignalR.Transports.WebSocketTransport.<PerformSend>d__8.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
   at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
   at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
   at Microsoft.AspNet.SignalR.Transports.WebSocketTransport.<PerformSend>d__8.MoveNext()
(few logs) System.ObjectDisposedException: Cannot access a disposed object.
Object name: 'System.Web.WebSockets.AspNetWebSocket'.
   at System.Web.WebSockets.AspNetWebSocket.get_State()
   at Microsoft.AspNet.SignalR.WebSockets.WebSocketHandler.SendAsync(ArraySegment`1 message, WebSocketMessageType messageType, Boolean endOfMessage)
   at Microsoft.AspNet.SignalR.WebSockets.DefaultWebSocketHandler.Flush()
   at Microsoft.AspNet.SignalR.Transports.WebSocketTransport.<PerformSend>d__8.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
   at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
   at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
   at Microsoft.AspNet.SignalR.Transports.WebSocketTransport.<PerformSend>d__8.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
   at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
   at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
   at Microsoft.AspNet.SignalR.Messaging.Subscription.<Invoke>d__2.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
   at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
   at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
   at Microsoft.AspNet.SignalR.Messaging.Subscription.<Work>d__8.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
   at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
   at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
   at Microsoft.AspNet.SignalR.Messaging.MessageBroker.<DoWork>d__2.MoveNext()
(few logs) System.ObjectDisposedException: Cannot access a disposed object.
Object name: 'System.Web.WebSockets.AspNetWebSocket'.
   at System.Web.WebSockets.AspNetWebSocket.get_State()
   at Microsoft.AspNet.SignalR.WebSockets.WebSocketHandler.SendAsync(ArraySegment`1 message, WebSocketMessageType messageType, Boolean endOfMessage)
   at Microsoft.AspNet.SignalR.WebSockets.DefaultWebSocketHandler.Flush()
   at Microsoft.AspNet.SignalR.Transports.WebSocketTransport.<PerformSend>d__8.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
   at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
   at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
   at Microsoft.AspNet.SignalR.Transports.WebSocketTransport.<PerformSend>d__8.MoveNext()

Are they normal behavior? Should I need to care about them?

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Projects

    No projects

    Milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions