我是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 而不是在类本身(不是这个。处置(((