我在 ASP.NET 中使用与下面类似的代码进行非关键的即发即弃操作
private void SomeMethod()
{
FireAndForgetAsync();
}
private async Task FireAndForgetAsync()
{
// Simulate medium running IO blocking operation
await Task.Delay(sleepTime).ConfigureAwait(false);
// Simulating the rare scenario where an error occurs
throw new Exception("An Error Occurred");
}
Run Code Online (Sandbox Code Playgroud)
该异常是在从异步方法返回的任务中捕获的,这可以防止未处理的异常完全导致应用程序崩溃。
但是这段代码会导致内存泄漏吗?因为返回的任务(及其异常)没有被分配/访问?我的想法是,除非某些 .NET 框架代码持有对该任务的引用,否则它只会被垃圾收集。