c# - 从 viewmodel wpf 和 c# 中处理服务层对象
问题描述
我是新IDisposable
概念,当我处理对象时,我有以下场景面临异常(stackover 流)。
我必须创建多个请求(并行)才能从 API 获得响应。
如下所示:
视图模型
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);
}
}
问题:由于我在使用(})结束时通过并行线程创建多个对象,因此会引发 stackoverflow 异常。
解决方案:我想处理创建 foreach 每次迭代的“objectService”。
请帮我解决这个问题。
解决方案
stackoverflow 错误来自这样一个事实,即再次调用Dispose()
的调用以此类推,直到您到达堆栈的末尾。Dispose(bool disposing)
Dispose()
这不是多线程的问题。
如果您再次查看IDisposable
Microsoft https://docs.microsoft.com/fr-fr/dotnet/api/system.idisposable?view=netframework-4.8给出的对象示例,您将看到if (disposing)
您需要调用 Dispose on类包含而不是类本身的所有IDisposable
成员(不是this.Dispose())
推荐阅读
- javascript - Webpack 无法解析 svg
- python - VS 代码中的 jupyter 笔记本:为什么我不能加载库“请求”?
- android - 聚焦可组合的文本
- java - 查找数字列表的平方根
- instance - 使用导出变量进行实例化不起作用,因此,无法通过将其他场景添加为 Main 的子场景来克隆场景
- pdf - 使用 vtl 和 fop 以编程方式将图片插入 pdf
- spring-webflux - 处理时忽略作业触发器
- tableau-api - 使用 Tableau 的实时 COVID 数据仪表板
- ios - 来自 Docker Image 的 Windows .exe 和 Apple .app 应用程序
- amazon-web-services - 使用 API 网关中的 IAM 授权检索 AWS lambda 中的用户属性