如何检查无效操作,错误连接已关闭是否在System.Data.SqlClient中修复

How to check if Invalid Operation, Error connection is closed is fixed in System.Data.SqlClient

提问人:daxu 提问时间:6/15/2022 更新时间:6/15/2022 访问量:380

问:

在高负载期间,我们的应用程序会随机抛出以下错误:

System.Data.SqlClient.SqlConnection.GetOpenTdsConnection
outerType
System.AggregateException
outerMessage
A Task's exception(s) were not observed either by Waiting on the Task or accessing its Exception property. As a result, the unobserved exception was rethrown by the finalizer thread.
innermostType
System.InvalidOperationException
innermostMessage
Invalid operation. The connection is closed

我调查了一下,看起来这个问题已在 Microsoft.Data.SQLClient 上修复

我们的代码来自旧世界,仍然使用 System.Data.SqlClient.Is 有一种方法可以知道System.Data.SqlClient中是否存在相同的问题并在新版本中修复?或者我们将不得不使用 Microsoft.Data.SQLClient?(我们之前尝试过Microsoft.Data.SqlClient,并且存在行为差异)

C# System.Data.SqlClient Microsoft-Data-SQLlient

评论

0赞 daxu 6/15/2022
好的,看起来修复程序仅在 Microsoft.Data.SqlClient github.com/dotnet/SqlClient/issues/1524
0赞 Charlieface 6/15/2022
看起来您正在使用而不是.Waitawait

答:

0赞 Jalpesh Vadgama 6/15/2022 #1

如果您正在使用任务,您可以执行以下操作,我不确定您是否会得到您想要的所有信息,但您将获得有关未处理异常的更多信息

public static void LogExceptions(this Task task)
{
   task.ContinueWith( t =>
   {
        var aggException = t.Exception.Flatten();
        foreach(var exception in aggException.InnerExceptions)
           LogException(exception);
   }, 
   TaskContinuationOptions.OnlyOnFaulted);
}

您可以像下面这样使用

Task.Factory.StartNew( () => 
{ 
      // Do your work...
}).LogExceptions();

或者,您可以使用 获取未观察到任务异常的任务异常。TaskScheduler.UnobservedTaskException

有关更多信息,请参阅以下链接

通过等待任务或访问其 Exception 属性,都无法观察到任务的异常。因此,未观察到的异常是

查找导致“未观察到任务异常...”的原因

评论

0赞 daxu 6/15/2022
谢谢,但我不认为这是我要问的