Loop in Task durchsteppen!



  • Hallo Leute,

    ich habe folgendes, einen Task welcher eine Berechnung asynchron durchführt, die Berechnungschritte werden in einer Loop berechnet (Pseudo):

    private Task<ResponseResult> DoCalc(RequestData requestData)
            {
     return Task.Factory.StartNew(
                    (requestData) =>
                    {
     while (true)
                                {
                                   // hier wird berechnet:
                                    _success= _calc.RunSingleCycle();
    
    if(_success)
    break;
    
    }
    
        }, requestData
                    , ct);
    
    }
    

    nun möchte ich aber die einzelnen Berechnungsschritte "durchsteppen" um den berechnung testen zu können, und habe folgendes gemacht:

    private readonly SemaphoreSlim _syncWaitCycle = new SemaphoreSlim(0);
            private readonly SemaphoreSlim _syncWaitCycle2 = new SemaphoreSlim(0);
    
     private Task<ResponseResult> DoCalc(RequestData requestData)
            {
     return Task.Factory.StartNew(
                    (requestData) =>
                    {
     while (true)
                                {
                                   // hier wird berechnet:
      _syncWaitCycle.Wait(-1); //HIER warten auf näcshten schritt
                                    _success= _calc.RunSingleCycle();
      _syncWaitCycle2.Release(); //Hier feedback, wenn schritt berechnet wurde
    
    if(_success)
    break;
    
    }
    
        }, requestData
                    , ct);
    
    }
    
    //Berechnung schritt durchführen
    
     public bool RunSingleCycle()
            {
                _syncWaitCycle.Release();
    
                _syncWaitCycle2.Wait(-1);
    
                return _success;
            }
    

    ich finde das aber keine schöne Lösung, habt ihr ne Idee??


Log in to reply