ObjectDisposedException in async ASP.NET Web API method with
本文关键字:API method with Web NET in async ASP ObjectDisposedException | 更新日期: 2023-09-27 18:31:37
我在异步 ASP.NET Web API 方法中通过 Autofac 注入的对象延迟实例化期间收到一个 ObjectDisposedException(无法解析实例,并且无法从此 LifetimeScope 创建嵌套生存期,因为它已被释放)。
这是 Web API 方法:
Lazy<PrintHubSender> _printHubSender;
public async void Print(Guid orderId)
{
var order = await _orderNoSqlDbRepository.GetSingleAsync(o => o.Id == orderId);
_printHubSender.Value.PrintOrder(order); // This triggers the exception
}
惰性实例通过 Web API 控制器构造函数注入。Autofac 注册如下:
Type hubSender = ...
containerBuilder.RegisterType(hubSender)
.AsSelf()
.PropertiesAutowired()
.InstancePerRequest();
如果 ASP.NET Web API 方法不是异步的,则不会发生异常。
Web API 引擎不知道方法是否async
async
因为它是一个编译时概念。
引擎知道的是方法是否返回Task
派生值。
除了事件处理程序或任何其他 API 之外,方法调用的完成并不重要,Task
void
的async
等效值,因为T
的async
等效值Task<T>
。
试试这个:
public async Task Print(Guid orderId)
{
...
}