林在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
是的,这是正确的 –