質問: p.Games.ToList() }).ToListAsync(); ``` このコードをConsole Application / XUnitテストで実行すると、例外として動作します...しかし、ASP.Net WebApiで実行すると、デッドロックになり、決して終了しません。 私は**ConfigureAwait(false)**を使ってこのような状況を防止していますが、問題のあるコードがその下にあるようです。私はそれがEFCoreが使用する**System.Interactive.Async**ライブラリの下にあると思う - より具体的には、 https : //github.com/Reactive-Extensions/Rx.NET/blob/develop/Ix.NET/の下にある。 Source / System.Interactive.Async / ToAsyncEnumerable.cs#L72実際に実行スレッドをブロックする " **Result** "呼び出しがあります。 誰かがこの動作に遭遇しましたか、おそらくいくつかの回避策がありますか? 私が "Games"エンティティをロードしなかった場合、すべてが正常に機能することに注意してください。 編集:StackTraceを追加しました:( **ToEnumerable**への呼び出しを参照してください) フラグなし21672 5ワーカースレッドgrpc 0(cq 0)System.Interactive.Async.dll!System.Linq.AsyncEnumerable。 **ToEnumerable_**通常のMscorlib.dll!System.Threading.Monitor.Wait(オブジェクトobj、int型millisecondsTimeout、ブール値exitContext)!System.Threading.Monitor.Wait(オブジェクトobj、int型millisecondsTimeoutが)のMscorlib.dllのMscorlib.dll!System.Threading.ManualResetEventSlim .Wait(int millisecondsTimeout、System.Threading.CancellationToken cancellationToken)mscorlib.dll!System.Threading.Tasks.Task.SpinThenBlockingWait(int millisecondsTimeout、System.Threading.CancellationToken cancellationToken)mscorlib.dll!System.Threading.Tasks.Task.InternalWait (int millisecondsTimeout、System.Threading.CancellationToken cancellationToken)mscorlib.dll!System.Threading.Tasks.Task.GetResultCore(bool waitCompletionNotification)mscorlib.dll!System.Threading.Tasks.Task.Result.get()System.Interactive.Async (System.Collections.Generic.IAsyncEnumerable source)mscorlib.dll!System.Collections.Generic.List.List .Lin q.Enumerable.ToList(System.Collections.Generic.IEnumerable source)[軽量機能] Microsoft.EntityFrameworkCore.dll!Microsoft.EntityFrameworkCore.Query.Internal.AsyncLinqOperatorProvider.SelectAsyncEnumerable.SelectAsyncEnumerator.MoveNext(System.Threading.CancellationToken cancellationToken)mscorlib。 dll!System.Runtime.CompilerServices.AsyncMethodBuilderCore.MoveNextRunner.InvokeMoveNext(オブジェクトstateMachine)mscorlib.dll!System.Threading.ExecutionContext.RunInternal(System.Threading.ExecutionContext executionContext、System.Threading.ContextCallbackコールバック、オブジェクト状態、bool preserveSyncCtx)mscorlib .dll!System.Threading.ExecutionContext.Run(System.Threading.ExecutionContext executionContext、System.Threading.ContextCallbackコールバック、オブジェクト状態、bool preserveSyncCtx)mscorlib.dll!System.Runtime.CompilerServices.AsyncMethodBuilderCore.MoveNextRunner.Run()mscorlib。 dll!System.Runtime.CompilerServices.AsyncMethodBuilderCore.OutputAsyncCausalityEvents.AnonymousMethod__0()ms corlib.dll!System.Runtime.CompilerServices.AsyncMethodBuilderCore.ContinuationWrapper.Invoke()mscorlib.dll!System.Runtime.CompilerServices.TaskAwaiter.OutputWaitEtwEvents.AnonymousMethod__0()mscorlib.dll!System.Runtime.CompilerServices.AsyncMethodBuilderCore.ContinuationWrapper.Invoke )mscorlib.dll!System.Threading.Tasks.AwaitTaskContinuation.RunOrScheduleAction(System.Actionアクション、bool allowInlining、ref System.Threading.Tasks.Task currentTask)mscorlib.dll!System.Threading.Tasks.Task.FinishContinuations()mscorlib。 dll!System.Threading.Tasks.Task.FinishStageThree()mscorlib.dll!System.Threading.Tasks.Task.TrySetResult(ブール結果)mscorlib.dll!System.Runtime.CompilerServices.AsyncTaskMethodBuilder.SetResult(ブール結果)NG.Data .Spanner.EF.dll!NG.Data.Spanner.EF.Query.Internal.SpannerAsyncQueryingEnumerable.SpannerAsyncEnumerator.MoveNext(System.Threading.CancellationToken cancellationToken)行55 [Resyncing Async Method] mscorlib.dll!System.Runtime.CompilerServices.AsyncMethodBu ildCore.MoveNextRunner.InvokeMoveNext(オブジェクトstateMachine)mscorlib.dll!System.Threading.ExecutionContext.RunInternal(System.Threading.ExecutionContext executionContext、System.Threading.ContextCallbackコールバック、オブジェクト状態、bool preserveSyncCtx)mscorlib.dll!System.Threading.ExecutionContext .Run(System.Threading.ExecutionContext executionContext、System.Threading.ContextCallbackコールバック、オブジェクト状態、bool preserveSyncCtx)mscorlib.dll!System.Runtime.CompilerServices.AsyncMethodBuilderCore.MoveNextRunner.Run()mscorlib.dll!System.Runtime.CompilerServices。 AsyncMethodBuilderCore.OutputAsyncCausalityEvents.AnonymousMethod__0()mscorlib.dll!System.Runtime.CompilerServices.AsyncMethodBuilderCore.ContinuationWrapper.Invoke()mscorlib.dll!System.Runtime.CompilerServices.TaskAwaiter.OutputWaitEtwEvents.AnonymousMethod__0()mscorlib.dll!System.Runtime.CompilerServices .AsyncMethodBuilderCore.ContinuationWrapper.Invoke()mscorlib.dll!System.Threading.Tasks.AwaitTaskContinuation.RunOrSchedul (System.Actionアクション、bool allowInlining、ref System.Threading.Tasks.Task現在のタスク)mscorlib.dll!System.Threading.Tasks.Task.FinishContinuations()mscorlib.dll!System.Threading.Tasks.Task.FinishStageThree() mscorlib.dll!System.Threading.Tasks.Task.TrySetResult(bool結果)mscorlib.dll!System.Runtime.CompilerServices.AsyncTaskMethodBuilder.SetResult(bool結果)Microsoft.EntityFrameworkCore.dll!Microsoft.EntityFrameworkCore.Query.Internal.AsyncLinqOperatorProvider。 SelectAsyncEnumerable.SelectAsyncEnumerator.MoveNext(System.Threading.CancellationToken cancelationToken)mscorlib.dll!System.Runtime.CompilerServices.AsyncMethodBuilderCore.MoveNextRunner.InvokeMoveNext(object stateMachine)mscorlib.dll!System.Threading.ExecutionContext.RunInternal(System.Threading.ExecutionContext executionContext 、System.Threading.ContextCallbackコールバック、オブジェクト状態、bool preserveSyncCtx)mscorlib.dll!System.Threading.ExecutionContext.Run(System.Threading.ExecutionContext executionContext、 mscorlib.dll!System.Runtime.CompilerServices.AsyncMethodBuilderCore.MoveNextRunner.Run()mscorlib.dll!System.Runtime.CompilerServices.AsyncMethodBuilderCore.OutputAsyncCausalityEvents.AnonymousMethod__0()mscorlib.dll System.Runtime.CompilerServices.AsyncMethodBuilderCore.OutputAsyncCausalityEvents.AnonymousMethod__0() !System.Runtime.CompilerServices.AsyncMethodBuilderCore.ContinuationWrapper.Invoke()mscorlib.dll!System.Runtime.CompilerServices.TaskAwaiter.OutputWaitEtwEvents.AnonymousMethod__0()mscorlib.dll!System.Runtime.CompilerServices.AsyncMethodBuilderCore.ContinuationWrapper.Invoke()mscorlib。 dll!System.Threading.Tasks.AwaitTaskContinuation.RunOrScheduleAction(System.Actionアクション、bool allowInlining、ref System.Threading.Tasks.Task現在のタスク)mscorlib.dll!System.Threading.Tasks.Task.FinishContinuations()mscorlib.dll!System .Threading.Tasks.Tasks.FinishStageThree()mscorlib.dll!System.Threading.Tasks.Task.TrySetResult(ブール結果)mscorlib.dll!System.Runtime.CompilerServices.AsyncTaskMethodBuilder.S (Microsoft Corporation、その関連会社またはこれらの者の供給者がかかる損害の発生可能性を了知している場合を含みます。オブジェクトstateMachine)mscorlib.dll!System.Threading.ExecutionContext.RunInternal(System.Threading.ExecutionContext executionContext、System.Threading.ContextCallbackコールバック、オブジェクト状態、bool preserveSyncCtx)mscorlib.dll!System.Threading.ExecutionContext.Run(System.Threading ()mscorlib.dll!System.Runtime.CompilerServices.AsyncMethodBuilderCore.MoveNextRunner.Run()mscorlib.dll!System.Runtime.CompilerServices.AsyncMethodBuilderCore.OutputAsyncCausalityEvents.AnonymousMethod__0() )mscorlib.dll!System.Runtime.CompilerServices.AsyncMethodBuilderCore.ContinuationWrapper.I nscoke()mscorlib.dll!System.Runtime.CompilerServices.TaskAwaiter.OutputWaitEtwEvents.AnonymousMethod__0()mscorlib.dll!System.Runtime.CompilerServices.AsyncMethodBuilderCore.ContinuationWrapper.Invoke()mscorlib.dll!System.Threading.Tasks.AwaitTaskContinuation.RunOrScheduleAction (System.Actionアクション、bool allowInlining、ref System.Threading.Tasks.Task currentTask)mscorlib.dll!System.Threading.Tasks.Task.FinishContinuations()mscorlib.dll!System.Threading.Tasks.Task.FinishStageThree()mscorlib .dll!System.Threading.Tasks.Task.TrySetResult(ブール結果)mscorlib.dll!System.Runtime.CompilerServices.AsyncTaskMethodBuilder.SetResult(ブール結果)Microsoft.EntityFrameworkCore.Relational.dll!Microsoft.EntityFrameworkCore.Query.Internal.AsyncQueryingEnumerable .AsyncEnumerator.BufferlessMoveNext(bool buffer、System.Threading.CancellationToken cancellationToken)mscorlib.dll!System.Runtime.CompilerServices.AsyncMethodBuilderCore.MoveNextRunner.InvokeMoveNext(object stateMachine)mscorlib.dll!Sys (System.Threading.ExecutionContext実行コンテキスト、System.Threading.ContextCallbackコールバック、オブジェクト状態、bool preserveSyncCtx)mscorlib.dll!System.Threading.ExecutionContext.Run(System.Threading.ExecutionContext executionContext、System.Threading .ContextCallbackコールバック、オブジェクト状態、bool preserveSyncCtx)mscorlib.dll!System.Runtime.CompilerServices.AsyncMethodBuilderCore.MoveNextRunner.Run()mscorlib.dll!System.Runtime.CompilerServices.AsyncMethodBuilderCore.OutputAsyncCausalityEvents.AnonymousMethod__0()mscorlib.dll!System。 Runtime.CompilerServices.AsyncMethodBuilderCore.ContinuationWrapper.Invoke()mscorlib.dll!System.Runtime.CompilerServices.TaskAwaiter.OutputWaitEtwEvents.AnonymousMethod__0()mscorlib.dll!System.Runtime.CompilerServices.AsyncMethodBuilderCore.ContinuationWrapper.Invoke()mscorlib.dll!System .Threading.Tasks.AwaitTaskContinuation.RunOrScheduleAction(System.Actionアクション、bool allowInlining、ref System.Threading.Tasks。タスクcurrentTask)mscorlib.dll!System.Threading.Tasks.Task.FinishContinuations()mscorlib.dll!System.Threading.Tasks.Task.FinishStageThree()mscorlib.dll!System.Threading.Tasks.Task.TrySetResult(System .__ Canon結果)mscorlib.dll!System.Threading.Tasks.TaskCompletionSource.TrySetResult(System .__ Canonの結果)Microsoft.EntityFrameworkCore.Relational.dll!System.Threading.Tasks.TaskExtensions.Cast.AnonymousMethod__(System.Threading.Tasks.Task t) mscorlib.dll!System.Threading.Tasks.ContinuationTaskFromResultTask.InnerInvoke()mscorlib.dll!System.Threading.Tasks.Task.Execute()mscorlib.dll!System.Threading.Tasks.Task.ExecutionContextCallback(オブジェクトobj)mscorlib.dll !System.Threading.ExecutionContext.RunInternal(System.Threading.ExecutionContext executionContext、System.Threading.ContextCallbackコールバック、オブジェクト状態、bool preserveSyncCtx)mscorlib.dll!System.Threading.ExecutionContext.Run(System.Threading.ExecutionContext executionContext、System。 Threading.ContextCallbackコールバック、objec t状態、bool preserveSyncCtx)mscorlib.dll!System.Threading.Tasks.Task.ExecuteWithThreadLocal(ref System.Threading.Tasks.Task currentTaskSlot)mscorlib.dll!System.Threading.Tasks.Task.ExecuteEntry(bool bPreventDoubleExecution)mscorlib.dll !System.Threading.Tasks.ThreadPoolTaskScheduler.TryExecuteTaskInline(System.Threading.Tasks.Taskタスク、bool taskWasPreviouslyQueued)mscorlib.dll!System.Threading.Tasks.TaskScheduler.TryRunInline(System.Threading.Tasks.Taskタスク、bool taskWasPreviouslyQueued)mscorlib .dll!System.Threading.Tasks.TaskContinuation.InlineIfPossibleOrElseQueue(System.Threading.Tasks.Taskタスク、bool needsProtection)mscorlib.dll!System.Threading.Tasks.StandardTaskContinuation.Run(System.Threading.Tasks.Task completedTask、bool bCanInlineContinuationTask )mscorlib.dll!System.Threading.Tasks.Task.FreeContinuations()mscorlib.dll!System.Threading.Tasks.Task.FinishStageThree()mscorlib.dll!System.Threading.Tasks.Task.TrySetResult(System .__ Canon result) mscorlib.dll!System.Ruプロパティ値の型。 .Collections.Generic.IReadOnlyDictionary parameterValues、bool closeConnection、System.Threading.CancellationToken cancellationToken)41行目[非同期メソッドの再開] mscorlib.dll!System.Runtime.CompilerServices.AsyncMethodBuilderCore.MoveNextRunner.InvokeMoveNext(object stateMachine)mscorlib.dll!System。 Thread.ExecutionContext.RunInternal(System.Threading.ExecutionContext executionContext、System.Threading.ContextCallbackコールバック、オブジェクトの状態、bool preserveSyncCtx)mscorlib.dll!System.Threading.ExecutionContext.Run(System.Threading.ExecutionContext executionContext、System.Threading.ContextCallbackコールバック、オブジェクト状態、bool preserveSyncCtx)mscorlib.dll!System.Runtime.CompilerServices.AsyncMethodBuilderCore.MoveNex System.Runtime.CompilerServices.AsyncMethodBuilderCore.ContinuationWrapper.Invoke()mscorlib.dll!System.Runtime.CompilerServices.TaskAwaiter()mscorlib.dll!System.Runtime.CompilerServices.AsyncMethodBuilderCore.OutputAsyncCausalityEvents.AnonymousMethod__0()mscorlib.dll!System.Runtime.CompilerServices.AsyncMethodBuilderCore.ContinuationWrapper.Invoke .OutputWaitEtwEvents.AnonymousMethod__0()mscorlib.dll!System.Runtime.CompilerServices.AsyncMethodBuilderCore.ContinuationWrapper.Invoke()mscorlib.dll!System.Threading.Tasks.AwaitTaskContinuation.RunOrScheduleAction(System.Actionアクション、bool allowInlining、ref System.Threading。 Tasks.Task currentTask)mscorlib.dll!System.Threading.Tasks.Task.FinishContinuations()mscorlib.dll!System.Threading.Tasks.Task.FinishStageThree()mscorlib.dll!System.Threading.Tasks.Task.TrySetResult(System .__ Canon result)mscorlib.dll!System.Runtime.CompilerServices.AsyncTaskMethodBuilder.SetResult(オブジェクトの結果)NG.Data.Spanner.EF.dll!NG.Data.Spanner.EF.Storage.Internal.SpannerRelationalCommand.ExecuteAsync(NG.Data .Spanner.EF.Stor内線.IOBehavior ioBehavior、Microsoft.EntityFrameworkCore.Storage.IRelationalConnection接続、文字列executeMethod、System.Collections.Generic.IReadOnlyDictionary parameterValues、bool closeConnection、System.Threading.CancellationToken cancelationToken)行128 [非同期メソッドの再開] mscorlib.dll!System .Runtime.CompilerServices.AsyncMethodBuilderCore.MoveNextRunner.InvokeMoveNext(object stateMachine)mscorlib.dll!System.Threading.ExecutionContext.RunInternal(System.Threading.ExecutionContext executionContext、System.Threading.ContextCallbackコールバック、オブジェクト状態、bool preserveSyncCtx)mscorlib.dll! mscorlib.dll!System.Runtime.CompilerServices.AsyncMethodBuilderCore.MoveNextRunner.Run()mscorlib.dll!System(System.Threading.ExecutionContext.Run(System.Threading.ExecutionContext executionContext、 .Runtime.CompilerServices.AsyncMethodBuilderCore.OutputAsyncCausalityEvents.AnonymousMethod__0()m ?System.Runtime.CompilerServices.AsyncMethodBuilderCore.ContinuationWrapper.Invoke()mscorlib.dll! )mscorlib.dll!System.Threading.Tasks.AwaitTaskContinuation.RunOrScheduleAction(System.Actionアクション、bool allowInlining、ref System.Threading.Tasks.Task currentTask)mscorlib.dll!System.Threading.Tasks.Task.FinishContinuations()mscorlib。 dll!System.Threading.Tasks.Task.FinishStageThree()mscorlib.dll!System.Threading.Tasks.Task.TrySetResult(System .__ Canonの結果)mscorlib.dll!System.Runtime.CompilerServices.AsyncTaskMethodBuilder.SetResult(System.Data。 Common.DbDataReader result)NG.Data.Spanner.dll!NG.Data.Spanner.SpannerCommand.ExecuteDbDataReaderAsync(System.Data.CommandBehaviorビヘイビア、System.Threading.CancellationToken取り消しトークン)67行目[Resyncing Async Method] mscorlib.dll!System。ランティムmscorlib.dll!System.Threading.ExecutionContext.RunInternal(System.Threading.ExecutionContext executionContext、System.Threading.ContextCallbackコールバック、オブジェクトの状態、bool preserveSyncCtx)mscorlib.dll!System(System.ControlService.AsyncMethodBuilderCore.MoveNextRunner.InvokeMoveNext) .Threading.ExecutionContext.Run(System.Threading.ExecutionContext executionContext、System.Threading.ContextCallbackコールバック、オブジェクト状態、bool preserveSyncCtx)mscorlib.dll!System.Runtime.CompilerServices.AsyncMethodBuilderCore.MoveNextRunner.Run()mscorlib.dll!System。 System.Runtime.CompilerServices.AsyncMethodBuilderCore.ContinuationWrapper.Invoke()mscorlib.dll!System.Runtime.CompilerServices.TaskAwaiter.OutputWaitEtwEvents.AnonymousMethod__0()mscorlib.dll!System .Runtime.CompilerServices.AsyncMethodBuilderCore.ContinuationWrapper.Invoke()mscorlib.dll!System.Threading.Tasks.Aw aTaskContinuation.RunOrScheduleAction(System.Actionアクション、bool allowInlining、ref System.Threading.Tasks.Task currentTask)mscorlib.dll!System.Threading.Tasks.Task.FinishContinuations()mscorlib.dll!System.Threading.Tasks.Task.FinishStageThree ()mscorlib.dll!System.Threading.Tasks.Task.TrySetResult(System .__ Canonの結果)mscorlib.dll!System.Runtime.CompilerServices.AsyncTaskMethodBuilder.SetResult(Google.Cloud.Spanner.V1.ResultSet result)NG.Data。 Spanner.dll!NG.Data.Spanner.SpannerConnection.RunQuery(string commandText)行118 [非同期メソッドの再開] mscorlib.dll!System.Runtime.CompilerServices.AsyncMethodBuilderCore.MoveNextRunner.InvokeMoveNext(オブジェクトstateMachine)mscorlib.dll!System.Threading .ExecutionContext.RunInternal(System.Threading.ExecutionContext executionContext、System.Threading.ContextCallbackコールバック、オブジェクト状態、bool preserveSyncCtx)mscorlib.dll!System.Threading.ExecutionContext.Run(System.Threading.ExecutionContext executionContext、System.Threading.ContextCオールバックコールバック、オブジェクト状態、bool preserveSyncCtx)mscorlib.dll!System.Runtime.CompilerServices.AsyncMethodBuilderCore.MoveNextRunner.Run()mscorlib.dll!System.Runtime.CompilerServices.AsyncMethodBuilderCore.OutputAsyncCausalityEvents.AnonymousMethod__0()mscorlib.dll!System.Runtime .CompilerServices.AsyncMethodBuilderCore.ContinuationWrapper.Invoke()mscorlib.dll!System.Runtime.CompilerServices.TaskAwaiter.OutputWaitEtwEvents.AnonymousMethod__0()mscorlib.dll!System.Runtime.CompilerServices.AsyncMethodBuilderCore.ContinuationWrapper.Invoke()mscorlib.dll!System。 Thread.Tasks.AwaitTaskContinuation.RunOrScheduleAction(System.Actionアクション、bool allowInlining、ref System.Threading.Tasks.Task現在のタスク)mscorlib.dll!System.Threading.Tasks.Task.FinishContinuations()mscorlib.dll!System.Threading.Tasks .Task.FinishStageThree()mscorlib.dll!System.Threading.Tasks.Task.TrySetResult(System .__ Canonの結果)mscorlib.dll!System.Runtime.CompilerServices.AsyncTaskMethodBuilder.SetResult(Google .Cloud.Spanner.V1.ResultSet result)Google.Api.Gax.Grpc.dll!Google.Api.Gax.Grpc.ApiCallRetryExtensions.WithRetry.AnonymousMethod__0(Google.Cloud.Spanner.V1.ExecuteSqlRequestリクエスト、Google.Api.Gax .Grpc.CallSettings callSettings)mscorlib.dll!System.Runtime.CompilerServices.AsyncMethodBuilderCore.MoveNextRunner.InvokeMoveNext(オブジェクトstateMachine)mscorlib.dll!System.Threading.ExecutionContext.RunInternal(System.Threading.ExecutionContext executionContext、System.Threading.ContextCallbackコールバック、オブジェクト状態、bool preserveSyncCtx)mscorlib.dll!System.Threading.ExecutionContext.Run(System.Threading.ExecutionContext executionContext、System.Threading.ContextCallbackコールバック、オブジェクト状態、bool preserveSyncCtx)mscorlib.dll!System.Runtime.CompilerServices.AsyncMethodBuilderCore .MoveNextRunner.Run()mscorlib.dll!System.Runtime.CompilerServices.AsyncMethodBuilderCore.OutputAsyncCausalityEvents.AnonymousMethod__0()mscorlib.dll!System.Runtime.CompilerServices.AsyncMethodBuilderCore.Contin mscorlib.dll!System.Runtime.CompilerServices.TaskAwaiter.OutputWaitEtwEvents.AnonymousMethod__0()mscorlib.dll!System.Runtime.CompilerServices.AsyncMethodBuilderCore.ContinuationWrapper.Invoke()mscorlib.dll!System.Threading.Tasks.AwaitTaskContinuation .RunOrScheduleAction(System.Actionアクション、bool allowInlining、ref System.Threading.Tasks.Task currentTask)mscorlib.dll!System.Threading.Tasks.Task.FinishContinuations()mscorlib.dll!System.Threading.Tasks.Task.FinishStageThree( )mscorlib.dll!System.Threading.Tasks.Task.TrySetResult(System .__ Canonの結果)mscorlib.dll!System.Threading.Tasks.TaskCompletionSource.TrySetResult(System .__ Canonの結果)mscorlib.dll!System.Threading.Tasks.TaskCompletionSource .SetResult(System .__ Canonの結果)Grpc.Core.dll!Grpc.Core.Internal.AsyncCall.HandleUnaryResponse(bool成功、Grpc.Core.Internal.ClientSideStatus receivedStatus、byte [] receivedMessage、Grpc.Core.Metadata responseHeaders)Grpc。 Core.dll!Grpc.Core.Internal.CallSafeHandレット。StartUnary.AnonymousMethod__0(bool成功、Grpc.Core.Internal.BatchContextSafeHandleコンテキスト)Grpc.Core.dll!Grpc.Core.Internal.CompletionRegistry.HandleBatchCompletion(bool success、Grpc.Core.Internal.BatchContextSafeHandle ctx、Grpc.Core。 Internal.BatchCompletionDelegateコールバック)Grpc.Core.dll!Grpc.Core.Internal.CompletionRegistry.RegisterBatchCompletion.AnonymousMethod__0(ブール成功)Grpc.Core.dll!Grpc.Core.Internal.GrpcThreadPool.RunHandlerLoop(Grpc.Core.Internal.CompletionQueueSafeHandle cq 、Grpc.Core.Profiling.IProfiler optionalProfiler)Grpc.Core.dll!Grpc.Core.Internal.GrpcThreadPool.CreateAndStartThread.AnonymousMethod__0()mscorlib.dll!System.Threading.ThreadHelper.ThreadStart_Context(オブジェクト状態)mscorlib.dll!System。 Thread.ExecutionContext.RunInternal(System.Threading.ExecutionContext executionContext、System.Threading.ContextCallbackコールバック、オブジェクト状態、bool preserveSyncCtx)mscorlib.dll!System.Threading.ExecutionContext.Run(System.Threading.ExecutionContext exe mscorlib.dll!System.Threading.ExecutionContext.Run(System.Threading.ExecutionContext executionContext、System.Threading.ContextCallbackコールバック、オブジェクト状態)mscorlib.dll!System。System.Threading.ContextCallbackコールバック、オブジェクト状態、bool preserveSyncCtx) Threading.ThreadHelper.ThreadStart()
回答: だから非常に長いデバッグの後、私は問題を見つけ出し、それを解決するためにいくつかの問題を解決しました。私は説明しようとします: 私は**EFコアプロバイダ**を**Google Spannerデータベースに**構築してい**ます** 。このため私はGoogle Spanner DotNet APIを使用していますが、それはまだ公開されておらず、非常に不完全なAPIではありません(実際には自動生成されたコードです)。 このAPIはgRPC APIを使用していますが、このAPIを使用した最初の非同期呼び出しでは、gRPCスレッド(gRPCには独自のスレッドプール実装があります)が使用され、次の実行呼び出しに使用されます。 gRPCスレッドプールからこのスレッドのみを実行します。 EFCoreは、System.Interactive.Async libを使用する "Games"リストのToEnumerableを呼び出します。 ToEnumerable実装では、実際に " **Result** "を呼び出して実行スレッドをブロックし、結果を待機します。 gRPCスレッドが使用され、実行が終了するのを待つため、デッドロックが発生します... 私の回避策は、次のコードを使用することでした: ``` GrpcEnvironment.SetCompletionQueueCount(1); ``` このようにして、継続はgRPCスレッドプールから他のスレッドで実行することができます。 これは回避策であり、使用する必要があります。しかし、それはその間に問題を解決するのに役立ちます... 本当の解決策は、ToEnumerable ...(これは純粋な非同期でなければならない)に関して、おそらくSystem.Interactive.Async libのEFCoreの使用にあるべきです。 **編集:**誰にも関連する場合**:** Google Spannerデータベース用のEFコアプロバイダをリリースしました: https : //github.com/NoGame/NG.Data.Spanner