Ath*_*hul 5 c# autofac cqrs asp.net-web-api mediatr
我有一个异步控制器,我试图从中调用两个不同的异步函数。像这样
public async void Approvefiles(string[] data)
{
var response = await _mediator.Send(new persons.Query(data));
await _mediator.Send(new employees.Query(data));
}
Run Code Online (Sandbox Code Playgroud)
对我来说一切看起来都不错,但这会引发错误
System.ObjectDisposedException: 'Instances cannot be resolved and nested lifetimes cannot be created from this LifetimeScope as it has already been disposed.'
Run Code Online (Sandbox Code Playgroud)
谁能指出我在这里做错了什么?如果我只调用一个异步函数(例如,仅用于 person.Query),则不会发生此错误。
你的问题在这里:
public async void Approvefiles(string[] data)
Run Code Online (Sandbox Code Playgroud)
async void方法几乎意味着没有任何东西会等待该方法完成后再继续(以及导致许多其他问题)。
所以我想你的请求范围在你的第二次调用之前就被清理了_mediator.Send,这意味着什么都无法解决。
您需要将签名更改为:
public async Task Approvefiles(string[] data)
Run Code Online (Sandbox Code Playgroud)
然后根据需要在控制器中等待该方法,以确保它在请求结束之前完成。
这里有一个关于为什么 async void 不好的答案,了解更多细节。
| 归档时间: |
|
| 查看次数: |
9616 次 |
| 最近记录: |