private Task <PlaceFileResult> PlaceFileAsync( OperationContext operationContext, SessionContext context, ContentHash contentHash, AbsolutePath path, FileAccessMode accessMode, FileReplacementMode replacementMode, FileRealizationMode realizationMode) { return(PerformOperationAsync( context, _ => Client.PlaceFileAsync( new PlaceFileRequest { Header = context.CreateHeader(), HashType = (int)contentHash.HashType, ContentHash = contentHash.ToByteString(), Path = path.Path, FileAccessMode = (int)accessMode, FileRealizationMode = (int)realizationMode, FileReplacementMode = (int)replacementMode }, options: GetCallOptions(Configuration.PlaceDeadline, operationContext.Token)), response => { // Workaround: Handle the service returning negative result codes in error cases PlaceFileResult.ResultCode resultCode = response.Header.Result < 0 ? PlaceFileResult.ResultCode.Error : (PlaceFileResult.ResultCode)response.Header.Result; if (!response.Header.Succeeded) { var message = string.IsNullOrEmpty(response.Header.ErrorMessage) ? resultCode.ToString() : response.Header.ErrorMessage; return new PlaceFileResult(resultCode, message, response.Header.Diagnostics); } else { return new PlaceFileResult(resultCode, response.ContentSize); } })); }