小编sri*_*bin的帖子

JavaScript异步编程:promises vs generator

Promises和generator允许您编写异步代码.我不明白为什么这两种机制都是在ECMA脚本6中引入的.什么时候最好使用promises,什么时候生成器?

javascript asynchronous node.js promise ecmascript-6

49
推荐指数
2
解决办法
1万
查看次数

为什么没有抓到这个例外?

我正在尝试运行以下代码:

class Program
{
    static void Main(string[] args)
    {
        var task = Task.Factory.StartNew(() =>
            {
                throw new ApplicationException("message");
            });
        try
        {
            task.ContinueWith(t => Console.WriteLine("End"));
        }
        catch (AggregateException aex)
        {
            Console.Write(aex.InnerException.Message);
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

我预计Exception会被捕获在以下位置:

        catch (AggregateException aex)
        {
            Console.Write(aex.InnerException.Message);
        }
Run Code Online (Sandbox Code Playgroud)

但这不会发生.为什么会这样?

c# multithreading task-parallel-library

7
推荐指数
1
解决办法
710
查看次数

Git:merge隐藏了某些变化

我们使用git在2015视觉工作室工作.我们有中央存储库(GitLab)和单个分支'master'.两个人克隆了存储库.

  1. 第一个人在解决方案中添加了"test-new-file-v.t​​xt"文件.它已更改解决方案文件(.sln)并更改了字符串"VisualStudioVersion = 14.0.23107.0".然后他在您的本地存储库中提交,然后在中央存储库(GitLab)中推送此提交.之后,我们在中央存储库(GitLab)中看到了这个提交: 在此输入图像描述

  2. 第二个人在解决方案中添加了"testgit.txt"文件.它也改变了解决方案文件(.sln),但没有更改字符串VisualStudioVersion.然后他想在推送前拉中央存储库(GitLab).

  3. 第二个人发生了冲突.他通过视觉工作室2015合并,看到不同的人在"VisualStudioVersion = 14.0.23107.0"上更改"VisualStudioVersion = 14.0.24720.0"时犯了错误.第二个人想要保持字符串"VisualStudioVersion = 14.0.24720.0"不变.他为这个字符串选择了本地状态"VisualStudioVersion = 14.0.24720.0"并进行提交合并.之后,他将这两个提交推送到中央存储库(GitLab).
  4. 之后,我们观察了中央存储库(GitLab)中的历史记录和更改,并看到提交合并来自第二个人: 在此输入图像描述

我们看到在中央存储库(GitLab)解决方案文件包含字符串"VisualStudioVersion = 14.0.24720.0",这是正确的,但我们不会看到这个字符串替换字符串"VisualStudioVersion = 14.0.23107.0",因为从第一个人提交包含此字符串并在合并提交之前.

我的问题:

  1. 这是正确的行为吗?我希望在合并提交中看到字符串"VisualStudioVersion = 14.0.23107.0"更改为"VisualStudioVersion = 14.0.24720.0".
  2. 我怎样才能实现可以看到所有变化的行为?

git bash version-control merge gitlab

5
推荐指数
1
解决办法
154
查看次数

压缩文件夹后,所有zip条目都会更改编码

我们使用ASP.NET核心并拥有以下代码:

public static void Compress(string sourceDirectoryName, string destinationArchiveFileName)
{
    var directoryName = Path.GetFileName(sourceDirectoryName);
    var remotePath = sourceDirectoryName.Split(new[] { directoryName }, StringSplitOptions.RemoveEmptyEntries).First();

    using (var zipStream = new MemoryStream())
    {
        using (var zip = new ZipArchive(zipStream, ZipArchiveMode.Create, true, Encoding.UTF8))
        {
            zip.CreateEntry(string.Concat(directoryName, directorySlash));

            foreach (var path in Directory.EnumerateFileSystemEntries(sourceDirectoryName, "*", SearchOption.AllDirectories))
            {
                if (!Directory.Exists(path))
                    zip.CreateEntryFromFile(path, path.RemoveSubString(remotePath).ReplacePathSeparatorOnSlash());
                else
                    zip.CreateEntry(string.Concat(path.RemoveSubString(remotePath).ReplacePathSeparatorOnSlash(), directorySlash));
            }
        }

        using (var outputZip = new FileStream(destinationArchiveFileName, FileMode.Create))
        {
            zipStream.Seek(0, SeekOrigin.Begin);
            zipStream.CopyTo(outputZip);
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

如果我们使用Windows资源管理器打开此存档,在压缩包含俄语符号的sourceDirectoryName之后,我们会看到以下内容:

在此输入图像描述 并且标有绿色的名称是正确的,并且标有红色的名称的名称编码已更改.

如果我们使用以下代码:

ZipFile.CreateFromDirectory(sourceDirectoryName, destinationArchiveFileName);
Run Code Online (Sandbox Code Playgroud)

我们有同样的问题.如何解决这个问题?

c# windows zip encoding asp.net-core

5
推荐指数
1
解决办法
237
查看次数