所以我有一個延續定義:任務延續的NullReferenceException
var task = _httpClient.SendAsync(request, cts.Token);
task.ContinueWith(i => { /* TODO: log */ },
TaskContinuationOptions.OnlyOnCanceled);
var response = await task.ConfigureAwait(false);
我上ContinueWith
行編譯器警告:
因爲這個呼叫沒有等待,目前的方法執行之前繼續通話完成。考慮將「await」運算符應用於調用的結果。
但是,正如您所看到的,我將await
應用於響應。
當包含該程序退出的方法,我得到一個NullReferenceException
:
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)
我的問題是:如何正確使用任務的延續和ConfigureAwait(false)
在同一時間?
['ContinueWith'(https://msdn.microsoft.com/en-us/library/dd270696(V = vs.110)的.aspx)返回新任務,所以沒有什麼令人驚奇的警告... – 2015-02-10 03:54:00
@AlexeiLevenkov有可能我在這裏錯過了一些重要的知識,因爲我從未真正嘗試過使用'ContinueWith'。任何想法如何正確使用它與異步/等待? – Haney 2015-02-10 04:04:14