我有一种async
方法可以用来卸载几秒钟的即发即弃的工作,以免减慢我的页面加载速度。这项工作需要一些常规设置和整理;我希望(快速)设置在抛出时同步抛出,但我不想强制整理在 ASP 上下文中运行,所以我ConfigureAwait
正在等待的位上使用:
public Task FireAndForget()
{
DoSetup();
return FireAndForgetAfterSetup();
}
private async Task FireAndForgetAfterSetup()
{
await AFewSecondsWorthOfWork().ConfigureAwait(false);
DoTidyUp();
}
protected void btn_Click(object sender, EventArgs e)
{
FireAndForget();
}
这看起来很奇怪,因为
FireAndForgetAfterSetup
不应该真正关心它是否是从 ASP 上下文中调用的,那么为什么它必须是调用者ConfigureAwait
呢?- 如果我改变主意并决定
btn_Click
应该等待FireAndForget
完成,它是否已经丢弃了 ASP 上下文(?)
如果我有误解,有人可以向我解释吗?