Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/315.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何优雅地处理调用可能永远不会返回的方法_C#_Asp.net_Asp.net Mvc 4_Clr_C# 5.0 - Fatal编程技术网

C# 如何优雅地处理调用可能永远不会返回的方法

C# 如何优雅地处理调用可能永远不会返回的方法,c#,asp.net,asp.net-mvc-4,clr,c#-5.0,C#,Asp.net,Asp.net Mvc 4,Clr,C# 5.0,在我的C#MVC4 ASP.NET代码(在控制器上的方法中)中,我调用了一个函数,我知道该函数可能永远不会返回。它是对Microsoft对象的调用,不会引发错误,不会超时,只是挂起(挂起并挂起) 我想我已经找到了导致这种情况发生的具体事件的原因,但是一般问题让我担心,我想预防它(因为它会导致服务器上的一般问题,而不仅仅是单个用户的孤立问题)。我想知道处理这类问题最优雅的方法 我正在调用的方法是,这显示了许多人遇到了许多问题,而这种方法似乎永远不会返回。也许可以尝试在其他线程上调用该方法?并在超时

在我的C#MVC4 ASP.NET代码(在控制器上的方法中)中,我调用了一个函数,我知道该函数可能永远不会返回。它是对Microsoft对象的调用,不会引发错误,不会超时,只是挂起(挂起并挂起)

我想我已经找到了导致这种情况发生的具体事件的原因,但是一般问题让我担心,我想预防它(因为它会导致服务器上的一般问题,而不仅仅是单个用户的孤立问题)。我想知道处理这类问题最优雅的方法


我正在调用的方法是,这显示了许多人遇到了许多问题,而这种方法似乎永远不会返回。

也许可以尝试在其他线程上调用该方法?并在超时后中止线程


虽然这根本不是一个简洁的解决方案,但如果没有关于方法挂起原因的误解,那么就没有太多的选项可用。

查看了a的这个答案后,我认为最糟糕的解决方案是将有问题的调用(到LocalReport.Render)包装到一个单独的进程和应用程序域中。然后,如果进程开始异常运行,我将终止它。

通常在这种情况下,客户端会超时吗?如果你的服务器没有有效响应,你就没有别的办法了。首先,我会认真考虑不要调用这样一个可能挂起或不稳定的函数。每个请求都会消耗线程池中的一个线程,太多这样的调用可能会产生问题。我坚决同意我们不应该使用它,如果你想了解SSR的一些缺点,请查看此每日wtf链接-。然而,有些事情我可以改变,有些事情我必须尽我所能处理,这是一个“好”的解决方案。创建任务并在给定的时间限制内等待。中止线程是一个非常危险的操作,很难安全执行。任何人都不应该在不了解其严重后果的情况下这样做。我完全认识到这一点,这就是为什么我提到这不是一个好的解决方案。