林在Web API(從DelegatingHandler繼承)2項目等待和線程安全使用的MessageHandler類變量工作
這是使用方法:使用
protected override async Task<HttpResponseMessage> SendAsync(HttpRequestMessage request, CancellationToken cancellationToken)
在該即時通訊下面的代碼片段:
string stringVariable = HelperClass.SomeFunctionThatReturnsAStringValue();
再往下我的代碼,然後讓像這樣
通話最後接近尾聲我然後執行以下操作:
if (!String.IsNullOrWhiteSpace(stringVariable))
response.Headers.WwwAuthenticate.Add(new AuthenticationHeaderValue(Bearer, stringVariable));
我已經設置了下面這也是從閱讀其他職位SO建議web.config中。
<add key="aspnet:UseTaskFriendlySynchronizationContext" value="true" />
<system.web>
<httpRuntime targetFramework="4.5" />
...
</system.web>
我的問題是圍繞着stringVariable。
是否有可能在代碼片段中將該值設置爲不同的結尾@當多個請求在同一時間進入時,將其作爲響應發回。
(我的理解是,當AWAIT被調用,所以線程安全可能是一個問題的處理線程得到釋放)
即:對用戶A的變量被設置,但是當用戶B使得請求@同時爲用戶A設置的值由於等待邏輯而被應用於UserB
直到'await'語句執行時,線程纔會被釋放,並且每個請求都有自己的'stringVaraible',因爲這是一個局部變量。這有幫助嗎? –
感謝Ned,是的,這就是我對await(線程獲得釋放)的理解,所以你說的是stringVariable在上面的上下文中是安全的,並且將始終正確地設置它用於的線程? (不適用於不同用戶的另一個線程) – AdrianSean
是的,這是正確的 –