如果你想要在Asp.net Core中避免在await next.Invoke()
上中断("绿色" 中断),你可以使用以下解决方法之一:
ConfigureAwait(false)
:
在await next.Invoke()
之后使用ConfigureAwait(false)
,这将告诉编译器在继续执行时不需要恢复到原来的上下文。这样可以避免"绿色" 中断的发生。public async Task InvokeAsync(HttpContext context, RequestDelegate next)
{
// 在await next.Invoke()之后使用ConfigureAwait(false)
await next.Invoke().ConfigureAwait(false);
// 继续执行其他代码
}
ConfigureAwait(true)
(默认行为):
默认情况下,await
操作会在原来的上下文中恢复执行。这意味着在await next.Invoke()
之后的代码将在同一个上下文中执行。如果你希望继续在相同的上下文中执行,请使用ConfigureAwait(true)
,这是默认的行为。public async Task InvokeAsync(HttpContext context, RequestDelegate next)
{
// 在await next.Invoke()之后使用ConfigureAwait(true)(或者省略)
await next.Invoke().ConfigureAwait(true);
// 继续执行其他代码
}
注意:在某些特定情况下,ConfigureAwait(true)
可能会导致死锁问题。在这种情况下,你可以使用ConfigureAwait(false)
来解决死锁问题。