private Task <PutResult> PutFileAsync( SessionContext context, ContentHash contentHash, AbsolutePath path, FileRealizationMode realizationMode) { return(PerformOperationAsync( context, sessionContext => _client.PutFileAsync( new PutFileRequest { Header = sessionContext.CreateHeader(), ContentHash = contentHash.ToByteString(), HashType = (int)contentHash.HashType, FileRealizationMode = (int)realizationMode, Path = path.Path }), response => { if (!response.Header.Succeeded) { return new PutResult(contentHash, response.Header.ErrorMessage, response.Header.Diagnostics); } else { return new PutResult(response.ContentHash.ToContentHash((HashType)response.HashType), response.ContentSize); } })); }
private async Task <PutResult> PutFileAsync( Context context, ContentHash contentHash, AbsolutePath path, FileRealizationMode realizationMode, int sessionId) { DateTime startTime = DateTime.UtcNow; PutFileResponse response = await RunClientActionAndThrowIfFailedAsync(context, async() => await _client.PutFileAsync( new PutFileRequest { Header = new RequestHeader(context.Id, sessionId), ContentHash = contentHash.ToByteString(), HashType = (int)contentHash.HashType, FileRealizationMode = (int)realizationMode, Path = path.Path })); long ticksWaited = response.Header.ServerReceiptTimeUtcTicks - startTime.Ticks; _tracer.TrackClientWaitForServerTicks(ticksWaited); if (!response.Header.Succeeded) { await ResetOnUnknownSessionAsync(context, response.Header, sessionId); return(new PutResult(contentHash, response.Header.ErrorMessage, response.Header.Diagnostics)); } else { return(new PutResult(response.ContentHash.ToContentHash((HashType)response.HashType), response.ContentSize)); } }