Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 为什么任务比任务快_C#_.net_Async Await_.net 4.5 - Fatal编程技术网

C# 为什么任务比任务快

C# 为什么任务比任务快,c#,.net,async-await,.net-4.5,C#,.net,Async Await,.net 4.5,我有存档文件的函数,所以我尝试创建它的异步版本。 但由于某种原因,若我将函数的返回类型从一个任务更改为另一个任务,它的运行速度会快得多 下面是实现的两个版本 public Task<bool> PsiZipFilesAsync(string zipFileName_, string[] listOfFiles_) { Task.Run(() => { using (ZipArchive zip = new Zi

我有存档文件的函数,所以我尝试创建它的异步版本。 但由于某种原因,若我将函数的返回类型从一个任务更改为另一个任务,它的运行速度会快得多

下面是实现的两个版本

public Task<bool> PsiZipFilesAsync(string zipFileName_, string[] listOfFiles_)
    {

        Task.Run(() => 
        {
            using (ZipArchive zip = new ZipArchive())
            {
                //zip.Password = pass;
                zip.EncryptionType = EncryptionType.PkZip;
                zip.AddFiles(listOfFiles_);

                zip.Save(zipFileName_);

            }
        });

        return Task.FromResult(true);

    }
    public Task PsiZipFilesAsync2(string zipFileName_, string[] listOfFiles_)
    {

        return Task.Run(() =>
        {
            using (ZipArchive zip = new ZipArchive())
            {
                //zip.Password = pass;
                zip.EncryptionType = EncryptionType.PkZip;
                zip.AddFiles(listOfFiles_);

                zip.Save(zipFileName_);

            }
        });



    }
对相同的文件进行压缩的时间差别很大

00:00:00.0049702-任务版本

00:00:08.4380303-任务版本

有人遇到过同样的问题吗?为什么这会有这么大的不同


一个问题是,在Task版本中,我无法捕获异常。

因为在第一个示例中,您实际上并没有等待工作项,而是在后台启动工作任务,然后返回Task.FromResulttrue并等待将任务结果设置为true并立即返回的结果,而在第二个示例中,您实际上正在执行工作并等待完成

将第一个示例更改为如下所示,然后重试:

public Task<bool> PsiZipFilesAsync(string zipFileName_, string[] listOfFiles_)
    {

        return Task.Run(() => 
        {
            using (ZipArchive zip = new ZipArchive())
            {
                //zip.Password = pass;
                zip.EncryptionType = EncryptionType.PkZip;
                zip.AddFiles(listOfFiles_);

                zip.Save(zipFileName_);

            }
            return true;
        });

    }

你是如何计算这些业绩数字的?我在您的示例中没有看到任何这样的代码,几乎可以肯定的是,您看到差异的原因是您没有编写正确的计时代码。我使用的是秒表
public Task<bool> PsiZipFilesAsync(string zipFileName_, string[] listOfFiles_)
    {

        return Task.Run(() => 
        {
            using (ZipArchive zip = new ZipArchive())
            {
                //zip.Password = pass;
                zip.EncryptionType = EncryptionType.PkZip;
                zip.AddFiles(listOfFiles_);

                zip.Save(zipFileName_);

            }
            return true;
        });

    }