![](/img/trans.png)
[英]Autofac Creating Child Scope for New Thread not working as expected “Instances cannot be resolved and nested lifetimes cannot be created…”
[英]System.ObjectDisposedException: 'Instances cannot be resolved and nested lifetimes cannot be created from this LifetimeScope
我有一個異步控制器,我試圖從中調用兩個不同的異步函數。 像這樣
public async void Approvefiles(string[] data)
{
var response = await _mediator.Send(new persons.Query(data));
await _mediator.Send(new employees.Query(data));
}
對我來說一切都很好,但這會引發錯誤
System.ObjectDisposedException: 'Instances cannot be resolved and nested lifetimes cannot be created from this LifetimeScope as it has already been disposed.'
誰能指出我在這里做錯了什么? 如果我只調用一個異步函數(僅適用於 person.Query),則不會發生此錯誤。
你的問題在這里:
public async void Approvefiles(string[] data)
async void
方法幾乎意味着在繼續之前沒有任何東西會等待該方法完成(以及導致許多其他問題)。
所以我想你的請求范圍在你的第二個_mediator.Send
調用之前被清理了,這意味着什么都無法解決。
您需要將簽名更改為:
public async Task Approvefiles(string[] data)
然后根據需要在控制器中等待該方法,以確保它在您的請求結束之前完成。
這里有一個關於為什么 async void 不好的答案,更多細節。
我的兩分錢。 我的是一個小錯誤,我忘了等待異步調用。
所以我有這個異步擴展方法如下。
public static async Task<T> DeserializePostInMeWurkFormat<T>(this HttpClient httpClient, string route, HttpContent? content)
{
var postResult = await httpClient.PostAsync(route, content);
postResult.EnsureSuccessStatusCode();
postResult.IsSuccessStatusCode.Should().BeTrue();
var stringResponse = await postResult.Content.ReadAsStringAsync();
var response = stringResponse.DeserializeWithCamelCasePolicy<T>();
return response!;
}
我沒有等待就打電話如下。
var postsResult = _client.DeserializePostInMeWurkFormat<CompanyOnboardDto>(OnboardCompanyRequest.Route, data);
得到如下異常。
System.ObjectDisposedException HResult=0x80131622 Message=無法解析實例,並且無法從此 LifetimeScope 創建嵌套生命周期,因為它(或其父范圍之一)已被釋放。 來源=Autofac
使用 await 更正了如下調用,現在它可以正常工作了。
var postsResult = await _client.DeserializePostInMeWurkFormat<CompanyOnboardDto>(OnboardCompanyRequest.Route, data);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.