我正在尝试使用Google Drive SDK时处理网络故障异常,我遇到以下问题。 我正在断开网络连接并运行此代码
try
{
FilesResource.InsertRequest r = service_.Files.Insert(body);
r.Fetch();
} catch
{
Console.WriteLine("Error");
}
但是由于未处理的异常,应用程序终止而不是打印“错误”。 调试器显示以下堆栈跟踪
Unable to connect to the remote server
at System.Net.HttpWebRequest.EndGetRequestStream(IAsyncResult asyncResult, TransportContext& context)
at System.Net.HttpWebRequest.EndGetRequestStream(IAsyncResult asyncResult)
at Google.Apis.Requests.Request.EndAttachBody(IAsyncResult asyncResult) in c:\code.google.com\google-api-dotnet-client\default_release\Tools\BuildRelease\bin\Debug\output\default\Src\GoogleApis\Apis\Requests\Request.cs:line 714
at System.Net.LazyAsyncResult.Complete(IntPtr userToken)
at System.Net.ContextAwareResult.CompleteCallback(Object state)
at System.Threading.ExecutionContext.runTryCode(Object userData)
at System.Runtime.CompilerServices.RuntimeHelpers.ExecuteCodeWithGuaranteedCleanup(TryCode code, CleanupCode backoutCode, Object userData)
at System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state)
at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean ignoreSyncCtx)
at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state)
at System.Net.ContextAwareResult.Complete(IntPtr userToken)
at System.Net.LazyAsyncResult.ProtectedInvokeCallback(Object result, IntPtr userToken)
at System.Net.HttpWebRequest.SetResponse(Exception E)
at System.Net.HttpWebRequest.SetAndOrProcessResponse(Object responseOrException)
at System.Net.ConnectionReturnResult.SetResponses(ConnectionReturnResult returnResult)
看起来Fetch()
内部执行了一些异步操作,并且未处理异常。所以我找不到处理这个异常的方法。它总是终止我的应用程序。我该如何解决这个问题?
更新
我找到了这行代码
Stream bodyStream = request.EndGetRequestStream(asyncResult);
Src\GoogleApis.Tests\Apis\Requests\RequestTest.cs:731
中的
EndGetRequestStream 会抛出一个未被线程处理的异常,因此看起来这是Client API中的一个错误。我对吗?任何解决方法?
更新
有什么答案吗?这非常重要。每次断开网络连接时,我的应用程序都会崩溃,如果不触及Google API源代码,则无法解决此问题。我将BeginGetResponse()
更改为GetResponse()
并重新编译代码,因此目前它适用于我并且Fetch()
按预期引发异常,但同步和异步操作共享公共代码(同步操作执行异步和等待)所以目前我不能做异步提取。你们会解决这个问题吗?
更新
谷歌说We support the Google Drive SDK on Stack Overflow
。
大家好,你真的为你的SDK提供了一些支持吗?我等了近5天的答案。有没有人?