Googleドライブ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は、スレッドによって処理されない例外をスローするため、これはクライアントAPIのバグのようです。私は正しいですか?回避策はありますか?
アップデート
何か答えはありますか?それは非常に重要です。ネットワークを切断するたびにアプリケーションがクラッシュします。これは、GoogleAPIのソースコードに触れないと解決できません。コードを変更 BeginGetResponse()
しGetResponse()
て再コンパイルしたので、現在は正常に機能しFetch()
、期待どおりに例外がスローされますが、同期操作と非同期操作は共通のコードを共有しているため(同期操作は非同期で実行され、待機します)、現在、非同期フェッチを実行できません。これを直してくれませんか?
アップデート
グーグルは言うWe support the Google Drive SDK on Stack Overflow
。皆さん、SDKに本当にある種のサポートを提供していますか?私はほぼ5日間どんな答えも待っています。だれかいますか?