小编Jam*_* Ko的帖子

不等待时TaskCanceledException

TaskCanceledException每当我同步返回另一个任务而不是等待它时,我似乎都会得到一个,遵循最后等待时的指导原则.

TaskCanceledException代码

public static class Download
{
    public static Task<byte[]> FromYouTubeAsync(string videoUri)
    {
        using (var client = new HttpClient())
        {
            return FromYouTubeAsync(
                () => client
                .GetStringAsync(videoUri),
                uri => client
                .GetByteArrayAsync(uri));
        }
    }

    public async static Task<byte[]> FromYouTubeAsync(
        Func<Task<string>> sourceFactory, Func<string, Task<byte[]>> downloadFactory)
    {
        string source = await // TaskCanceledException here
            sourceFactory()
            .ConfigureAwait(false);

        // find links

        return await
            downloadFactory(links.First())
            .ConfigureAwait(false);
    }
}
Run Code Online (Sandbox Code Playgroud)

无异常代码

这里,方法签名的第一个重载更改为异步,并等待第二个重载.由于某种原因,这可以防止TaskCanceledException.

public static class Download
{
    public async static Task<byte[]> FromYouTubeAsync(string videoUri)
    { …
Run Code Online (Sandbox Code Playgroud)

c# asynchronous task async-await

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

为什么这个虚方法返回true?

在学习C++中的多态性教程时,我的一些代码似乎在调用非重写虚拟方法时表现得很奇怪.以下是课程:

// classes.cpp

namespace Classes
{
    class C
    {
    public:
        virtual bool has_eyesight()
        {
            return false;
        }
    } c;

    class See : public C
    {
    public:
        bool has_eyesight() override
        {
            return true;
        }
    } si;
}
Run Code Online (Sandbox Code Playgroud)

这是主要方法:

// file.cpp

#include <iostream>
#include "classes.cpp"

using std::cout;
using std::endl;
using Classes::C;
using Classes::See;

int main()
{
    See& si = Classes::si;

    cout << si.has_eyesight() << endl;

    C& c = si;

    cout << c.has_eyesight() << endl;

    c = Classes::c;

    cout << c.has_eyesight() << endl; …
Run Code Online (Sandbox Code Playgroud)

c++ polymorphism virtual reference

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

C++中的字符串是否有removeAt函数?

我是C++的新手.我知道有一种std::remove方法可以从字符串中删除字符,但是有一种remove_at方法可以让我删除字符串中某个索引处的字符吗?例如,

string s = "aBcDeF";
s = s.remove_at(4).remove_at(2);
Run Code Online (Sandbox Code Playgroud)

会导致

"aBDF"
Run Code Online (Sandbox Code Playgroud)

标准库中是否有一个函数可以执行此操作?

c++ string

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

QString的目的是什么?

我是C++和Qt的新手.我已经和Qt Creator搞乱了几天,真正让我印象深刻的是GUI组件只接受了一个const QString&而不是一个string或一个std::wstring.为了与此保持一致,我一直在尝试接受并QString从大多数函数调用返回,但是我发现自己要转换为std::string大量使用大多数标准库工具.

我的问题是,QStringif std::string是标准库的一部分是什么目的?我想这对那些已经在使用Qt并且不想要另外依赖的人有益#include <string>,但说实话,std::string如果你想对你的应用程序做任何有用的事情,你将需要它.(这特别适用QChar,因为char是内置的.)

有人可以向我解释为什么这不是重新发明轮子以及这有助于跨平台?

c++ string qt std

2
推荐指数
2
解决办法
462
查看次数

如何在CMD中使用多个命令启动

是否有可能使CMD start在其新线程上运行多个命令?我试过这个:

:: Use start to finish before we're deleted
start /min (
    :: Do some work...
    :: Remove the app's root folder
    rd /s /q %~dp0
)
Run Code Online (Sandbox Code Playgroud)

但我得到"Windows无法找到该文件).请确保正确输入名称,然后重试."

有没有办法解决这个问题而不创建新的批处理脚本?

windows command-line cmd batch-file windows-10

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

与 LINQ 的 All() 等效的 PowerShell 是什么?

我正在尝试测试 PowerShell 中数组中所有项的条件是否为真(类似于 LINQ 的All函数)。除了编写手动 for 循环外,在 PowerShell 中执行此操作的“正确”方法是什么?

具体来说,是我试图从 C# 翻译的代码:

public static IEnumerable<string> FilterNamespaces(IEnumerable<string> namespaces)
  => namespaces
     .Where(ns => namespaces
       .Where(n => n != ns)
         .All(n => !Regex.IsMatch(n, $@"{Regex.Escape(ns)}[\.\n]")))
     .Distinct();
Run Code Online (Sandbox Code Playgroud)

linq powershell

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

MSBuild:给定绝对路径,如何获取文件的相对路径?

我遇到一堆绝对路径的情况,我想将它们转换为基于MSBuild的另一个目录的相对路径。这是我到目前为止的代码:

<PropertyGroup>
    <FromPath>$(Bar)</FromPath>
</PropertyGroup>
<ItemGroup>
    <AbsolutePaths Include="@(Foo)" Exclude="@(Baz)" />
    <PathsRelativeToBar Include="@(AbsolutePaths->'???')" /> <!-- What goes here? -->
</ItemGroup>
Run Code Online (Sandbox Code Playgroud)

任何帮助,将不胜感激,谢谢!

编辑:我在这个 StackOverflow问题中找到了一个基于C#的解决方案,但是我不确定如何(或是否有可能)将其转换为MSBuild。

.net c# msbuild

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

如何正确范围GNU find的-or运算符?如何找到可执行文件的符号链接?

我正在我的shell脚本中创建一个如下所示的函数:

getcmds()
{
    # find all executable files/symlinks in $(searchdirs) that start with 'upvoter-'
    searchdirs | xargs -i find {} -name 'upvoter-*' -type f -or -type l -maxdepth 1 -perm +111
}
Run Code Online (Sandbox Code Playgroud)

当我从我的脚本中的另一个位置运行此函数时,我得到了一大堆没有开头的输出upvoter-.我最终将其缩小到find这样解释我的查询的事实:

找到所有文件并以其开头upvoter-,OR是顶级目录中的可执行符号链接

我查看了查找手册页,试图找到解决问题的方法.我注意到find支持的括号,所以我尝试了这个:

find {} -name 'upvoter-*' -type f -or \( -type l \) -maxdepth 1 -perm +111
Run Code Online (Sandbox Code Playgroud)

还有这个:

find {} -name 'upvoter-*' \( -type f -or -type l \) -maxdepth 1 -perm +111
Run Code Online (Sandbox Code Playgroud)

不幸的是,他们都没有工作.我该怎么做才能解决这个问题?

谢谢.

unix linux bash shell posix

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

Json.NET:如何使 DefaultValueHandling 仅适用于某些类型?

我有一个看起来像这样的自定义类:

public class PartnerLoginOptions
{
    public string Username { get; set; }
    public string Password { get; set; }
    public string DeviceModel { get; set; }
    public string Version { get; set; }

    public bool? IncludeUrls { get; set; }
    public bool? ReturnDeviceType { get; set; }
    public bool? ReturnUpdatePromptVersions { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

我想bool?在序列化时忽略任何具有默认值的成员,但保留具有空值的字符串。例如,如果我有一个这样的对象

var options = new PartnerLoginOptions
{
    Username = null,
    Password = "123",
    IncludeUrls = null,
    ReturnDeviceType = true
};
Run Code Online (Sandbox Code Playgroud)

然后序列化将导致:

{
    "username": …
Run Code Online (Sandbox Code Playgroud)

.net c# serialization json json.net

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

为什么代码大小对 JIT 编译很重要?

假设您正在使用 JIT 编译语言进行开发。就生成的程序集的代码大小而言,使您的函数变得非常大是否有任何性能下降?

我问是因为我前几天在 C#中查看 Buffer.MemoryCopy的源代码,这显然是一种对性能非常敏感的方法。看来他们使用了一个大switch语句来专门针对所有字节计数<= 16 的函数,从而产生了一些非常庞大的生成程序集。

这种方法在性能方面有什么缺点吗?例如,我注意到glibcFreeBSD 的实现memmove不这样做,尽管 C 是 AOT 编译的,这意味着它不会受到JIT 预编译的成本(这是一个缺点)——对于 C# ,JIT 会等到第一次调用编译该方法,因此对于非常长的方法,第一次调用将花费更长的时间。

switch对于 JIT 语言来说,拥有庞大的语句和增加代码大小(除了我刚才提到的预编译成本)有什么好处/坏处?谢谢。(我对组装有点陌生,所以请对我放轻松:))

c# performance assembly jit

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