我想实现一个ASP.NET Core中间件(仅存在一个单例实例),该中间件将维护一个整数请求计数器,该计数器在每次请求进入时都会增加,并在每次请求进入时都会减少。完成。
public class GracetermMiddleware
{
private int requestCount = 0;
...
public async Task Invoke(HttpContext httpContext)
{
Interlocked.Increment(ref requestCount);
try
{
await next.Invoke(httpContext);
}
finally
{
Interlocked.Decrement(ref requestCount);
}
}
}
然后我想做的是让一个事件处理程序在应用程序停止时触发,以延迟进程的终止,直到处理了未解决的请求。这就是我试图达到的目的。
private void OnApplicationStopping()
{
do
{
// Waiting for the outstanding requests to drain
Thread.Sleep(1000);
}
while (requestCount > 0);
}
(我还有一些超时处理,示例中省略了。)
我的问题是:声明volatile
字段时是否需要使用requestCount
关键字?会导致该字段不是volatile
的任何问题吗?