首先,我正在尝试为产品构建一个插件 - 因此环境不是我的,而且我对正在发生的事情没有太多了解。据我所知,系统正在运行 .NET Framework 4.6.2,并且我已尝试确保所有依赖项都与系统上的依赖项相匹配。
我看到的问题是,当我发出await PostAsync(...)
请求,我得到一个NullReferenceException
。这是 100% 可重复的。但是,如果我使用完全相同的请求PostAsync(...).Result
,一切正常。
鉴于我可以使用await
关键字解析响应,它仍然可以正常工作。
我想以“正确”的方式做到这一点,使用await
关键字,但它不起作用。从我读过的所有内容来看,这可能是一个依赖性问题,但我不知道在哪里可以找到它。我已经在这上面花了 3 天了,当我finally发现使用.Result
“解决”我的问题。
相关代码:
private async Task<T> aFunction<T>(string path, Dictionary<string, string> data) {
var content = new FormUrlEncodedContent(data);
var response = client.PostAsync(path, content).Result; // This works
// var response = await client.PostAsync(path, content); // This does not
response.EnsureSuccessStatusCode();
var result = await response.Content.ReadAsStringAsync();
var parsed = JsonConvert.DeserializeObject<T>(result);
return parsed;
}
NRE 的堆栈跟踪:
Stack trace:
at System.Web.ThreadContext.AssociateWithCurrentThread(Boolean setImpersonationContext)
at System.Web.HttpApplication.OnThreadEnterPrivate(Boolean setImpersonationContext)
at System.Web.LegacyAspNetSynchronizationContext.CallCallbackPossiblyUnderLock(SendOrPostCallback callback, Object state)
at System.Web.LegacyAspNetSynchronizationContext.CallCallback(SendOrPostCallback callback, Object state)
at System.Threading.Tasks.AwaitTaskContinuation.RunCallback(ContextCallback callback, Object state, Task& currentTask)
--- End of stack trace from previous location where exception was thrown ---
at System.Threading.Tasks.AwaitTaskContinuation.<>c.<ThrowAsyncIfNecessary>b__18_0(Object s)
at System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx)
at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx)
at System.Threading.QueueUserWorkItemCallback.System.Threading.IThreadPoolWorkItem.ExecuteWorkItem()
at System.Threading.ThreadPoolWorkQueue.Dispatch()