I wrote a download function and I wanted to know if my code clean, readable and maintainable, or if I could make things easier. Please tell me if this function could be used in the real world.public static void Download(Uri _downloadUri, string _path, string _passedSong, Song _currentObj) {        if (_downloadUri != null) {            if (!string.IsNullOrEmpty(_path) && !string.IsNullOrEmpty(_passedSong)) {                try {                    var downloadedData = new byte[0];                    var webReq = WebRequest.Create(_downloadUri);                    using (var webResponse = webReq.GetResponse()) {                        using (var dataStream = webResponse.GetResponseStream()) {                            //Download chuncks                            byte[] dataBuffer = new byte[1024];                            //Get size                            int dataLength = (int) webResponse.ContentLength;                            ByteArgs byteArgs = new ByteArgs();                            byteArgs.downloaded = 0;                            byteArgs.total = dataLength;                            if (_bytesDownloaded != null) {                                _bytesDownloaded(byteArgs, _currentObj);                            }                            //Download                            using (var memoryStream = new MemoryStream()) {                                while (true) {                                    int bytesFromStream = dataStream.Read(dataBuffer, 0, dataBuffer.Length);                                    if (bytesFromStream == 0) {                                        byteArgs.downloaded = dataLength;                                        byteArgs.total = dataLength;                                        if (_bytesDownloaded != null) {                                            _bytesDownloaded(byteArgs, _currentObj);                                        }                                        //Download complete                                        break;                                    }                                    else {                                        //Write the downloaded data                                        memoryStream.Write(dataBuffer, 0, bytesFromStream);                                        byteArgs.downloaded = bytesFromStream;                                        byteArgs.total = dataLength;// for download progressbar                                        if (_bytesDownloaded != null) {                                            _bytesDownloaded(byteArgs, _currentObj);                                        }                                    }                                }                                //Convert to byte array                                downloadedData = memoryStream.ToArray();                                //Write bytes to the specified file                                if (Directory.Exists(Settings.Default.downloadDirectory)) {                                    using (var newFile = new FileStream(_path, FileMode.Create)) {                                        newFile.Write(downloadedData, 0, downloadedData.Length);                                    }                                }                            }                        }                    }                }                catch(Exception ex) {                    ExceptionLog.LogException(ex, Download(), in GeneralSettings.cs);                }            }        }    }
Download function
c#