FlushAsync() public méthode

public FlushAsync ( CancellationToken cancellationToken ) : Task
cancellationToken CancellationToken
Résultat Task
 public async Task SaveFile(string name, Stream stream)
 {
     var fullPath = GetFullPath(name);
     using (var fs = new FileStream(fullPath, FileMode.OpenOrCreate, FileAccess.Write))
     {
         await stream.CopyToAsync(fs).ConfigureAwait(false);
         await stream.FlushAsync().ConfigureAwait(false);
         await fs.FlushAsync().ConfigureAwait(false);
     }
 }
Exemple #2
0
        public async Task <IActionResult> OnPostUploadAsync(IFormFile file)
        {
            if (file is null)
            {
                return(StatusCode(400));
            }

            User user = userManager.GetUser(HttpContext, database);

            if (user is null)
            {
                return(Unauthorized());
            }

            System.IO.FileStream stream = await fileManager.CreateFile(user, (int)file.Length, file.FileName, "/Web", out string identifier);

            await file.CopyToAsync(stream);

            await stream.FlushAsync();

            stream.Close();

            string response = identifier + ";" + Path.GetFileName(file.FileName).Replace(";", "");

            return(Content(response));
        }
 public Task FlushAsync()
 {
     if (YetaWFManager.IsSync())
     {
         Stream.Flush();
         return(Task.CompletedTask);
     }
     else
     {
         return(Stream.FlushAsync());
     }
 }
 public async Task DownloadAsync(string url, IDictionary<string, string> headers, string method, string saveAs)
 {
     // Download the data
     var data = await this.DownloadAsync(url, headers, method);
     // Write the file
     using (var memStream = new MemoryStream(data))
     {
         using (var stream = new FileStream(saveAs, FileMode.CreateNew, FileAccess.Write, FileShare.None, (int)1024, true))
         {
             await memStream.CopyToAsync(stream);
             await stream.FlushAsync();
         }
     }
 }
        public override async Task FlushAsync()
        {
            await this.writeLock.WaitAsync();

            try {
                await fs.FlushAsync();
            }
            catch {
                this.ReOpen();
            }
            finally {
                this.writeLock.Release();
            }
        }
 static public int FlushAsync(IntPtr l)
 {
     try {
         System.IO.FileStream self = (System.IO.FileStream)checkSelf(l);
         System.Threading.CancellationToken a1;
         checkValueType(l, 2, out a1);
         var ret = self.FlushAsync(a1);
         pushValue(l, true);
         pushValue(l, ret);
         return(2);
     }
     catch (Exception e) {
         return(error(l, e));
     }
 }
Exemple #7
0
        public async Task <ActionResult> FileUpload()
        {
            string filePath = System.IO.Path.Combine(_hostingEnvironment.WebRootPath, _filePath);

            if (!System.IO.Directory.Exists(filePath))
            {
                System.IO.Directory.CreateDirectory(filePath);
            }
            var file = Request.Form.Files.FirstOrDefault();

            if (file == null)
            {
                throw new Abp.UI.UserFriendlyException(417, "没有图片");
            }
            string fileType = file.FileName.Split(".").LastOrDefault();

            string[] fileTypeArr = new string[] { "jpg", "gif", "png", "jpeg" };
            if (string.IsNullOrEmpty(fileType) || !fileTypeArr.Contains(fileType.ToLower()))
            {
                throw new Abp.UI.UserFriendlyException(415, "非图片文件");
            }
            string fileName     = DateTime.Now.ToString("yyyyMMddHHmm_") + file.FileName;
            string fullFilePath = System.IO.Path.Combine(filePath, fileName);

            using (System.IO.FileStream fs = System.IO.File.Create(fullFilePath))
            {
                await file.CopyToAsync(fs);

                await fs.FlushAsync();
            }

            var savedFile = new System.IO.FileInfo(fullFilePath);
            var optimizer = new ImageOptimizer();

            optimizer.Compress(savedFile);
            savedFile.Refresh();

            return(Json(new
            {
                StatusCode = 200,
                Info = "图片上传成功!",
                Data = new
                {
                    url = string.Format("{0}{1}/{2}{3}", "Http://", Request.Host, _filePath, fileName),
                    name = fileName,
                }
            }));
        }
Exemple #8
0
 /// <summary>
 /// An async FileLog constructor.
 /// </summary>
 /// <param name="path">The path to the log file.</param>
 /// <param name="useAsync">Instruct the underlying IO subsystem to optimize for async I/O.</param>
 /// <returns>An <see cref="FileLog"/> instance.</returns>
 public static async Task<FileLog> Create(string path, bool useAsync)
 {
     if (path == null) throw new ArgumentNullException("path");
     path = string.Intern(Path.GetFullPath(path));
     var writer = new FileStream(path, FileMode.OpenOrCreate, FileAccess.ReadWrite, FileShare.Read, 4096, useAsync);
     var buf = new byte[LHDR_SIZE];
     // check the file's version number if file exists, else write it out and initialize the log
     long next;
     Version vers;
     if (writer.Length < LHDR_SIZE)
     {
         next = LHDR_SIZE;
         vers = VERSION;
         buf.Write(vers.Major, LHDR_MAJOR);
         buf.Write(vers.Minor, LHDR_MINOR);
         buf.Write(vers.Revision, LHDR_REV);
         buf.Write(next, LHDR_TX);
         await writer.WriteAsync(buf, 0, LHDR_SIZE);
         await writer.FlushAsync();
     }
     else
     {
         await writer.ReadAsync(buf, 0, LHDR_SIZE);
         var major = buf.ReadInt32(LHDR_MAJOR);
         var minor = buf.ReadInt32(LHDR_MINOR);
         var rev = buf.ReadInt32(LHDR_REV);
         vers = new Version(major, minor, 0, rev);
         if (vers != VERSION)
         {
             writer.Dispose();
             throw new NotSupportedException(string.Format("File log expects version {0} but found version {1}", VERSION, vers));
         }
         next = buf.ReadInt32(LHDR_TX);
     }
     return new FileLog(path, writer, next);
 }
        public async Task WriteFromStream(Stream sourceStream, FileInfo[] targets)
        {
            string targetPath = ResolveFileFullPath(targets.First()); // take first - path is based only on hash

            // write to files
            using (var fileStream = new FileStream(targetPath, FileMode.Create))
            using (var gzip = new GZipStream(fileStream, CompressionMode.Compress))
            {
                await sourceStream.CopyToAsync(gzip);
                await fileStream.FlushAsync();
            }

            // update index
            await UpdateFilesList(filesToAddOrUpdate: targets);
        }
Exemple #10
0
        public void ProcessRequest(HttpContext context)
        {
            try
            {
                context.Response.ContentType = "image/jpeg";
                int iconid = Convert.ToInt32(context.Request.QueryString["Id"]);

                if (File.Exists(@".\Data\Icons\" + iconid.ToString() + ".jpg"))
                {
                    using (MemoryStream ms = new MemoryStream())
                    {
                        File.Open(HttpContext.Current.Server.MapPath("~") + @"\Data\Icons\" + iconid.ToString() + ".jpg", FileMode.Open).CopyTo(ms);
                        context.Response.BinaryWrite(ms.ToArray());
                    }
                }
                else
                {
                    int id = Convert.ToInt32(iconid);

                    RZService oSVC = new RZService();

                    var oSW = oSVC.GetSWDetail(id);
                    if (oSW.Image != null)
                    {
                        byte[] image = oSW.Image;

                        MemoryStream ms = new MemoryStream(image);
                        try
                        {
                            var sIcon = new System.IO.FileStream(HttpContext.Current.Server.MapPath("~") + @"\Data\Icons\" + iconid.ToString() + ".jpg", FileMode.Create);
                            ms.CopyTo(sIcon);
                            sIcon.FlushAsync();
                        }
                        catch { }

                        context.Response.BinaryWrite(image);
                    }
                }
            }
            catch { }

            /*try
             * {
             *  int id = Convert.ToInt32(context.Request.QueryString["Id"]);
             *
             *  string cmdText = "SELECT Icon FROM [ProductVersion] WHERE Id = " + id;
             *  string myConnection = "Data Source=server.database.windows.net;Initial Catalog=xxxx;User ID=xxxx;Password=xxxxx";
             *  SqlConnection connection = new SqlConnection(myConnection);
             *  SqlCommand command = new SqlCommand(cmdText, connection);
             *  try
             *  {
             *      context.Response.ContentType = "image/jpeg";
             *
             *
             *      connection.Open();
             *
             *      SqlDataReader reader = command.ExecuteReader();
             *      reader.Read();
             *      byte[] image = (byte[])reader.GetValue(0);
             *      context.Response.BinaryWrite(image);
             *      reader.Close();
             *  }
             *  catch { }
             *  finally
             *  {
             *      connection.Close();
             *  }
             * }
             * catch { }*/
        }
Exemple #11
0
        /// <summary>
        /// _work
        ///     \_update
        ///            \bin
        ///            \externals
        ///            \run.sh
        ///            \run.cmd
        ///            \package.zip //temp download .zip/.tar.gz
        /// </summary>
        /// <param name="token"></param>
        /// <returns></returns>
        private async Task<string> DownloadLatestAgent(CancellationToken token)
        {
            var agentServer = HostContext.GetService<IAgentServer>();
            string latestAgentDirectory = IOUtil.GetUpdatePath(HostContext);
            IOUtil.DeleteDirectory(latestAgentDirectory, token);
            Directory.CreateDirectory(latestAgentDirectory);
            string archiveFile = Path.Combine(latestAgentDirectory, $"{new Uri(_latestPackage.DownloadUrl).Segments.Last()}");

            try
            {
                using (var httpClient = new HttpClient())
                {
                    //open zip stream in async mode
                    using (FileStream fs = new FileStream(archiveFile, FileMode.Create, FileAccess.Write, FileShare.None, bufferSize: 4096, useAsync: true))
                    {
                        using (Stream result = await httpClient.GetStreamAsync(_latestPackage.DownloadUrl))
                        {
                            //81920 is the default used by System.IO.Stream.CopyTo and is under the large object heap threshold (85k). 
                            await result.CopyToAsync(fs, 81920, token);
                            await fs.FlushAsync(token);
                        }
                    }
                }

                if (archiveFile.EndsWith(".zip", StringComparison.OrdinalIgnoreCase))
                {
                    ZipFile.ExtractToDirectory(archiveFile, latestAgentDirectory);
                }
                else if (archiveFile.EndsWith(".tar.gz", StringComparison.OrdinalIgnoreCase))
                {
                    var whichUtil = HostContext.GetService<IWhichUtil>();
                    string tar = whichUtil.Which("tar");
                    if (string.IsNullOrEmpty(tar))
                    {
                        throw new NotSupportedException($"tar -xzf");
                    }

                    // tar -xzf
                    using (var processInvoker = HostContext.CreateService<IProcessInvoker>())
                    {
                        processInvoker.OutputDataReceived += new EventHandler<ProcessDataReceivedEventArgs>((sender, args) =>
                        {
                            if (!string.IsNullOrEmpty(args.Data))
                            {
                                Trace.Info(args.Data);
                            }
                        });

                        processInvoker.ErrorDataReceived += new EventHandler<ProcessDataReceivedEventArgs>((sender, args) =>
                        {
                            if (!string.IsNullOrEmpty(args.Data))
                            {
                                Trace.Error(args.Data);
                            }
                        });

                        int exitCode = await processInvoker.ExecuteAsync(latestAgentDirectory, tar, $"-xzf {archiveFile}", null, token);
                        if (exitCode != 0)
                        {
                            throw new NotSupportedException($"Can't use 'tar -xzf' extract archive file: {archiveFile}. return code: {exitCode}.");
                        }
                    }
                }
                else
                {
                    throw new NotSupportedException($"{archiveFile}");
                }

                Trace.Info($"Finished getting latest agent package at: {latestAgentDirectory}.");
            }
            finally
            {
                try
                {
                    // delete .zip file
                    if (!string.IsNullOrEmpty(archiveFile) && File.Exists(archiveFile))
                    {
                        Trace.Verbose("Deleting latest agent package zip: {0}", archiveFile);
                        IOUtil.DeleteFile(archiveFile);
                    }
                }
                catch (Exception ex)
                {
                    //it is not critical if we fail to delete the temp folder
                    Trace.Warning("Failed to delete agent package zip '{0}'. Exception: {1}", archiveFile, ex);
                }
            }

            return latestAgentDirectory;
        }
    public async Task SaveUpkFile(DomainHeader Header, string Filename) {
      if (Header == null) return;

      foreach(DomainExportTableEntry export in Header.ExportTable.Where(export => export.DomainObject == null)) await export.ParseDomainObject(Header, false, false);

      FileStream stream = new FileStream(Filename, FileMode.Create);

      int headerSize = Header.GetBuilderSize();

      ByteArrayWriter writer = ByteArrayWriter.CreateNew(headerSize);

      await Header.WriteBuffer(writer, 0);

      await stream.WriteAsync(writer.GetBytes(), 0, headerSize);

      foreach(DomainExportTableEntry export in Header.ExportTable) {
        ByteArrayWriter objectWriter = await export.WriteObjectBuffer();

        await stream.WriteAsync(objectWriter.GetBytes(), 0, objectWriter.Index);
      }

      await stream.FlushAsync();

      stream.Close();
    }
        public async Task WriteFromStream(Stream sourceStream, FileInfo[] targets)
        {
            // create copy if multiple targets
            if(targets.Length > 1)
            {
                var copy = new MemoryStream();
                await sourceStream.CopyToAsync(copy);
                sourceStream = copy;
            }

            foreach (var target in targets)
            {
                target.EnsureParentDirectoryExists(Path);
                string targetPath = target.ResolveFullPath(Path);

                using (var fileStream = new FileStream(targetPath, FileMode.Create))
                {
                    await sourceStream.CopyToAsync(fileStream);
                    await fileStream.FlushAsync();
                }
            }
        }
        private async Task<string> CopyAssets ()
        {
            try {
                Android.Content.Res.AssetManager assetManager = _context.Assets;
                string[] files = assetManager.List ("tessdata");
                File file = _context.GetExternalFilesDir (null);
                var tessdata = new File (_context.GetExternalFilesDir (null), "tessdata");
                if (!tessdata.Exists ()) {
                    tessdata.Mkdir ();
                } else {
                    var packageInfo = _context.PackageManager.GetPackageInfo (_context.PackageName, 0);
                    var version = packageInfo.VersionName;
                    var versionFile = new File (tessdata, "version");
                    if (versionFile.Exists ()) {
                        var fileVersion = System.IO.File.ReadAllText (versionFile.AbsolutePath);
                        if (version == fileVersion) {
                            Log.Debug ("[TesseractApi]", "Application version didn't change, skipping copying assets");
                            return file.AbsolutePath;
                        }
                        versionFile.Delete ();
                    }
                    System.IO.File.WriteAllText (versionFile.AbsolutePath, version);
                }

                Log.Debug ("[TesseractApi]", "Copy assets to " + file.AbsolutePath);

                foreach (var filename in files) {
                    using (var inStream = assetManager.Open ("tessdata/" + filename)) {
                        var outFile = new File (tessdata, filename);
                        if (outFile.Exists ()) {
                            outFile.Delete ();
                        }
                        using (var outStream = new FileStream (outFile.AbsolutePath, FileMode.Create)) {
                            await inStream.CopyToAsync (outStream);
                            await outStream.FlushAsync ();
                        }
                    }
                }
                return file.AbsolutePath;
            } catch (Exception ex) {
                Log.Error ("[TesseractApi]", ex.Message);
            }
            return null;
        }
Exemple #15
0
 public override Task FlushAsync(CancellationToken cancellationToken)
 {
     return(tempStream.FlushAsync(cancellationToken));
 }
Exemple #16
0
 /// <summary>
 /// Asynchronously deletes the specified file.
 /// </summary>
 /// 
 /// <param name="path">The name of the file to be deleted. Wildcard characters are not supported.</param>
 /// <remarks>
 /// <para>
 /// Specify a file name with any relative or absolute path information for the <paramref name="path"/> parameter. 
 /// Wildcard characters cannot be included. Relative path information is interpreted as relative to the current working directory. 
 /// To obtain the current working directory, see <see cref="Directory.GetCurrentDirectory"/>.
 /// </para>
 /// <para>If the file to be deleted does not exist, no exception is thrown.</para>
 /// </remarks>
 /// 
 /// <exception cref="ArgumentException"><paramref name="path"/> is a zero-length string, contains only white space, or contains one more invalid characters defined by the <see cref="Path.GetInvalidPathChars"/> method.</exception>
 /// <exception cref="ArgumentNullException"><paramref name="path"/> is <c>null</c>.</exception>
 /// <exception cref="DirectoryNotFoundException">The path specified in <paramref name="path"/> is invalid (for example, it is on an unmapped drive).</exception>
 /// <exception cref="IOException">
 /// <para>The specified file is in use.</para>
 /// <para>-or-</para>
 /// <para>There is an open handle on the file, and the operating system is Windows XP or earlier. This open handle can result from enumerating directories and files.</para>
 /// </exception>
 /// <exception cref="NotSupportedException"><paramref name="path"/> is in an invalid format.</exception>
 /// <exception cref="PathTooLongException">
 /// The specified path, file name, or both exceed the system-defined maximum length. 
 /// For example, on Windows-based platforms, paths must be less than 248 characters, and file names must be less than 260 characters.
 /// </exception>
 /// <exception cref="SecurityException">The caller does not have the required permission.</exception>
 /// <exception cref="UnauthorizedAccessException"><paramref name="path"/> specifies a read-only file.
 /// <para>-or-</para>
 /// <para>The caller does not have the required permission.</para>
 /// <para>-or-</para>
 /// <para>The file is an executable file that is in use.</para>
 /// <para>-or-</para>
 /// <para><paramref name="path"/> is a directory.</para>
 /// </exception>
 /// 
 /// <returns>Task that represents asynchronous operation.</returns>
 public static async Task DeleteAsync(string path)
 {
     PathValidator.EnsureCorrectFileSystemPath(path);
     if (File.Exists(path))
     {
         const int bufferSize = 4096;
         using (var fileStream = new FileStream(path, FileMode.Truncate, FileAccess.Write, FileShare.Delete, bufferSize, true))
         {
             await fileStream.FlushAsync();
             File.Delete(path);
         }
     }
 }
Exemple #17
0
        private async Task DownloadAsync(IExecutionContext executionContext, TaskReference task)
        {
            Trace.Entering();
            ArgUtil.NotNull(executionContext, nameof(executionContext));
            ArgUtil.NotNull(task, nameof(task));
            ArgUtil.NotNullOrEmpty(task.Version, nameof(task.Version));
            var taskServer = HostContext.GetService<ITaskServer>();

            // first check to see if we already have the task
            string destDirectory = GetDirectory(task);
            Trace.Info($"Ensuring task exists: ID '{task.Id}', version '{task.Version}', name '{task.Name}', directory '{destDirectory}'.");
            if (Directory.Exists(destDirectory))
            {
                Trace.Info("Task already downloaded.");
                return;
            }

            Trace.Info("Getting task.");
            string zipFile;
            var version = new TaskVersion(task.Version);

            //download and extract task in a temp folder and rename it on success
            string tempDirectory = Path.Combine(IOUtil.GetTasksPath(HostContext), "_temp_" + Guid.NewGuid());
            try
            {
                Directory.CreateDirectory(tempDirectory);
                zipFile = Path.Combine(tempDirectory, string.Format("{0}.zip", Guid.NewGuid()));
                //open zip stream in async mode
                using (FileStream fs = new FileStream(zipFile, FileMode.Create, FileAccess.Write, FileShare.None, bufferSize: 4096, useAsync: true))
                {
                    using (Stream result = await taskServer.GetTaskContentZipAsync(task.Id, version, executionContext.CancellationToken))
                    {
                        //81920 is the default used by System.IO.Stream.CopyTo and is under the large object heap threshold (85k). 
                        await result.CopyToAsync(fs, 81920, executionContext.CancellationToken);
                        await fs.FlushAsync(executionContext.CancellationToken);
                    }
                }

                ZipFile.ExtractToDirectory(zipFile, tempDirectory);
                File.Delete(zipFile);
                Directory.CreateDirectory(Path.GetDirectoryName(destDirectory));
                Directory.Move(tempDirectory, destDirectory);
                Trace.Info("Finished getting task.");
            }
            finally
            {
                try
                {
                    //if the temp folder wasn't moved -> wipe it
                    if (Directory.Exists(tempDirectory))
                    {
                        Trace.Verbose("Deleting task temp folder: {0}", tempDirectory);
                        IOUtil.DeleteDirectory(tempDirectory, CancellationToken.None); // Don't cancel this cleanup and should be pretty fast.
                    }
                }
                catch (Exception ex)
                {
                    //it is not critical if we fail to delete the temp folder
                    Trace.Warning("Failed to delete temp folder '{0}'. Exception: {1}", tempDirectory, ex);
                    executionContext.Warning(StringUtil.Loc("FailedDeletingTempDirectory0Message1", tempDirectory, ex.Message));
                }
            }
        }
Exemple #18
0
        internal async Task<HttpSourceResult> GetAsync(string uri, string cacheKey, TimeSpan cacheAgeLimit, bool ignoreNotFounds, CancellationToken cancellationToken)
        {
            var sw = new Stopwatch();
            sw.Start();

            var result = await TryCache(uri, cacheKey, cacheAgeLimit);
            if (result.Stream != null)
            {
                Logger.LogVerbose(string.Format(CultureInfo.InvariantCulture, "  {0} {1}", "CACHE".Green(), uri));
                return result;
            }

            Logger.LogVerbose(string.Format(CultureInfo.InvariantCulture, "  {0} {1}.", "GET".Yellow(), uri));

            var request = new HttpRequestMessage(HttpMethod.Get, uri);
            if (_userName != null)
            {
                var token = Convert.ToBase64String(Encoding.UTF8.GetBytes(_userName + ":" + _password));
                request.Headers.Authorization = new AuthenticationHeaderValue("Basic", token);
            }
            ;

#if DNXCORE50
            if (_proxyUserName != null)
            {
                var proxyToken = Convert.ToBase64String(Encoding.UTF8.GetBytes(_proxyUserName + ":" + _proxyPassword));
                request.Headers.ProxyAuthorization = new AuthenticationHeaderValue("Basic", proxyToken);
            }
#endif

            var response = await _client.SendAsync(request, cancellationToken);
            if (ignoreNotFounds && response.StatusCode == HttpStatusCode.NotFound)
            {
                Logger.LogInformation(string.Format(CultureInfo.InvariantCulture,
                    "  {1} {0} {2}ms", uri, response.StatusCode.ToString().Green(), sw.ElapsedMilliseconds.ToString().Bold()));
                return new HttpSourceResult();
            }

            response.EnsureSuccessStatusCode();

            var newFile = result.CacheFileName + "-new";

            // Zero value of TTL means we always download the latest package
            // So we write to a temp file instead of cache
            if (cacheAgeLimit.Equals(TimeSpan.Zero))
            {
                result.CacheFileName = Path.GetTempFileName();
                newFile = Path.GetTempFileName();
            }

            // The update of a cached file is divided into two steps:
            // 1) Delete the old file. 2) Create a new file with the same name.
            // To prevent race condition among multiple processes, here we use a lock to make the update atomic.
            await ConcurrencyUtilities.ExecuteWithFileLocked(result.CacheFileName, async _ =>
                {
                    using (var stream = new FileStream(
                        newFile,
                        FileMode.Create,
                        FileAccess.ReadWrite,
                        FileShare.ReadWrite | FileShare.Delete,
                        BufferSize,
                        useAsync: true))
                    {
                        await response.Content.CopyToAsync(stream);
                        await stream.FlushAsync(cancellationToken);
                    }

                    if (File.Exists(result.CacheFileName))
                    {
                        // Process B can perform deletion on an opened file if the file is opened by process A
                        // with FileShare.Delete flag. However, the file won't be actually deleted until A close it.
                        // This special feature can cause race condition, so we never delete an opened file.
                        if (!IsFileAlreadyOpen(result.CacheFileName))
                        {
                            File.Delete(result.CacheFileName);
                        }
                    }

                    // If the destination file doesn't exist, we can safely perform moving operation.
                    // Otherwise, moving operation will fail.
                    if (!File.Exists(result.CacheFileName))
                    {
                        File.Move(
                            newFile,
                            result.CacheFileName);
                    }

                    // Even the file deletion operation above succeeds but the file is not actually deleted,
                    // we can still safely read it because it means that some other process just updated it
                    // and we don't need to update it with the same content again.
                    result.Stream = new FileStream(
                        result.CacheFileName,
                        FileMode.Open,
                        FileAccess.Read,
                        FileShare.Read | FileShare.Delete,
                        BufferSize,
                        useAsync: true);

                    return 0;
                });

            Logger.LogVerbose(string.Format(CultureInfo.InvariantCulture,
                "  {1} {0} {2}ms", uri, response.StatusCode.ToString().Green(), sw.ElapsedMilliseconds.ToString().Bold()));

            return result;
        }