首页 > 解决方案 > 从 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”。

请帮我解决这个问题。

标签: c#wpfparallel-processingidisposableparallel.foreach

解决方案


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

这不是多线程的问题。

如果您再次查看IDisposableMicrosoft https://docs.microsoft.com/fr-fr/dotnet/api/system.idisposable?view=netframework-4.8给出的对象示例,您将看到if (disposing)您需要调用 Dispose on类包含而不是类本身的所有IDisposable 成员(不是this.Dispose()


推荐阅读