我在.NET Standard 1.4上有一个Xamarin.Forms应用程序,它使用WCF与位于本地网络中的服务进行通信。由于有一些非常长的运行操作,我必须实现非常高的超时(600秒)。如果服务不可用,应用程序现在将在那里停留600秒并且什么都不做,只是为了告诉用户该服务不可用。所以我实现了一个ping合约,它每5秒调用一次函数ping,所以我知道服务器是可用的,这是向用户显示的(根据用户的要求)。
在Android上这很好。如果服务器可用,则一切运行顺利,如果服务器由于某种原因脱机,则会引发异常,捕获并通知用户服务器处于脱机状态。
另一方面,在UWP上,在我能够捕获它之前,异常似乎被捕获并通过WCF实现的所有层调试输出重新抛出一百次。在我的Lumia 930上,这需要长达9秒的时间,即使在一个单独的任务中执行整个ping操作时,也会严重影响设备。在发布模式下,这种情况不那么极端,但大多数时候仍会冻结用户界面。我怎样才能解决这个问题?
编辑:
这是每次执行ping时逐行打印,而不是一个块,但服务不可用。我自己也不打印任何东西。
Active Browser Session
EDIT2:
我现在更新了项目中的每个NuGet包(主要是Exception thrown: 'System.IO.FileLoadException' in System.Private.CoreLib.ni.dll
Exception thrown: 'System.IO.FileLoadException' in System.Private.CoreLib.ni.dll
Exception thrown: 'System.IO.FileLoadException' in System.Private.CoreLib.ni.dll
Exception thrown: 'System.IO.FileLoadException' in System.Private.CoreLib.ni.dll
Exception thrown: 'System.Net.Http.HttpRequestException' in System.Private.ServiceModel.dll
Exception thrown: 'System.Net.Http.HttpRequestException' in System.Private.CoreLib.ni.dll
Exception thrown: 'System.Net.Http.HttpRequestException' in System.Private.CoreLib.ni.dll
Exception thrown: 'System.OperationCanceledException' in System.Net.Http.dll
Exception thrown: 'System.OperationCanceledException' in System.Private.CoreLib.ni.dll
Exception thrown: 'System.TimeoutException' in System.Private.ServiceModel.dll
Exception thrown: 'System.TimeoutException' in System.Private.CoreLib.ni.dll
Exception thrown: 'System.TimeoutException' in System.Private.ServiceModel.dll
Exception thrown: 'System.TimeoutException' in System.Private.CoreLib.ni.dll
Exception thrown: 'System.TimeoutException' in System.Private.CoreLib.ni.dll
Exception thrown: 'System.Reflection.TargetInvocationException' in System.Private.CoreLib.ni.dll
Exception thrown: 'System.TimeoutException' in System.Reflection.DispatchProxy.dll
Exception thrown: 'System.TimeoutException' in System.Private.CoreLib.ni.dll
Exception thrown: 'System.TimeoutException' in System.Private.CoreLib.ni.dll
,System.Net
和System.ServiceModel
包),它有点好转。无论服务状态如何,它都会抛出异常。现在它只在服务不可用时抛出异常,并且异常更少:
Microsoft.NETCore.UniversalWindowsPlatform
但异常仍会冻结GUI或此时发生的任何其他任务。
答案 0 :(得分:0)
我和您有相同的问题,并从此post获得了答案。可能会对您有所帮助。
“您所看到的基本上是Visual Studio调试器功能-VS注意到应用程序中引发的任何异常都是“优先机会异常”。 参见https://blogs.msdn.microsoft.com/visualstudioalm/2015/01/07/understanding-exceptions-while-debugging-with-visual-studio/。 在没有VS的情况下独立运行该应用程序时,您不会看到这些消息的打印。
更多详细信息:这些异常实际上是作为https://github.com/grpc/grpc/pull/11021/files的一部分抛出在代码中的,但是可以预期并正确地处理它们。它们实际上只是打印出来的VS功能。”