2017-11-30 1 views
-1

Ich habe die folgende Methode in einem Service-Gewebe zuverlässig Schauspieler:Machen Async-Aufrufe in einem zuverlässigen Actor Break-Turn-Concurrency?

async Task IRoomActor.ReportUpdateAsync(SensorCacheItem sensorItem, CancellationToken cancellationToken) 
    { 
     try 
     { 
      //get the state of this room 
      RoomState roomState = await GetOrCreateState(sensorItem.RoomId, cancellationToken); 

      //update state based on the sensor cache item passed in 
      var existingItem = roomState.Sensors.FirstOrDefault(s => s.SensorRowId == sensorItem.SensorRowId); 
      if (existingItem != null) 
      { 
       roomState.Sensors.Remove(existingItem); 
      } 

      roomState.Sensors.Add(sensorItem);    

      //update status based on sensors 
      ResolveStatusFromSensors(roomState, sensorItem); 

      //save or update the state 
      await StateManager.AddOrUpdateStateAsync(ServiceConstants.RoomActorStateName, roomState, 
       (key, value) => roomState, cancellationToken); 

      await SaveStateAsync(); 

      //send updates to Floor Actor   
      await PropagateStateToParent(roomState, cancellationToken); 
     } 
     catch (Exception e) 
     { 
      ActorEventSource.Current.ActorMessage(this, $"Exception thrown in RoomActor.ReportUpdateAsync(): {e.StackTrace}"); 
      throw; 
     } 
    } 

Werden die erwarteten Anrufe in dieser Methode brechen die zuverlässige Wendung Schauspieler basierte Nebenläufigkeit? Kein

Antwort

1

, wird dies keine Auswirkungen auf die Wende basierte Parallelität als die gesamte Aufgabe von ReportUpdateAsync zurückgegeben (einschließlich es innere erwartet ist) muss abgeschlossen sein, bevor der nächste Anruf in erlaubt.

+0

Great! Vielen Dank –

Verwandte Themen