从视图模型 wpf 和 c# 中释放服务层对象



我是IDisposable概念的新手,我有以下情况 当我处理对象时面临异常(堆栈流(。

我必须创建多个请求(并行(才能从 应用程序接口。

如下所示:

视图模型

public vm 
{ 
vm(IunityContainer container) { }
public void somemethod 
{ 
await ListofItems.ParallelForEachAsync(async item =>
{
try
{
using (var objectService = _container.Resolve<IobjectService>())
{
var response = await objectService.GeAllItem(request);
concurrentBag.Add(response);
}
}
catch (Exception e)
{
_logger.Error("Failed operation.", e);
}
},maxDegreeOfParallelism: 5);
}
}

服务.cs

public class Service : Idisposable
{

protected virtual void Dispose(bool disposing)
{
if (_disposed)
return;
if (disposing)
{
this.Dispose();// not sure how to dispose the service layer object which is created 
}
_disposed = true;
}

public void Dispose()
{
Dispose(true);
GC.SuppressFinalize(this);
}

}

问题:由于我在使用 (}( 结束时通过并行线程创建多个对象,因此它会引发堆栈溢出异常。

解决方案:我想处理正在创建的"对象服务" Foreach的每次迭代。

请帮我解决这个问题。

堆栈溢出错误来自这样一个事实,即Dispose()调用Dispose(bool disposing),然后再次调用Dispose(),依此类推,直到您到达堆栈的末尾。

这不是多线程的问题。

如果您再次查看Microsoft https://learn.microsoft.com/fr-fr/dotnet/api/system.idisposable?view=netframework-4.8 给出的IDisposable对象的示例,您会发现if (disposing)内部需要对类包含的所有IDisposable成员调用 Dispose 而不是在类本身(不是这个。处置(((

最新更新