public async Task <string> ReceiveFileAsync() { // Receive file length var fileSize = await _networkCommunication.ReceiveLongAsync(); // Receive file chunks var path = Path.GetTempFileName(); await using var fileStream = File.OpenWrite(path); var read = 0; byte[] buffer = null; while (fileSize - read > ProtocolSpecification.FileChunkSize) { buffer = await _networkCommunication.ReceiveBytesAsync(ProtocolSpecification.FileChunkSize); await fileStream.WriteAsync(buffer, 0, ProtocolSpecification.FileChunkSize); read += ProtocolSpecification.FileChunkSize; } buffer = await _networkCommunication.ReceiveBytesAsync((int)(fileSize - read)); await fileStream.WriteAsync(buffer, 0, (int)(fileSize - read)); return(path); }