小编Ric*_*ter的帖子

在返回带有取消的 IAsyncEnumerable 的函数中迭代 IAsyncEnumerable

正如标题所说,我必须执行以下功能:

public async IAsyncEnumerable<Job> GetByPipeline(int pipelineId,
    [EnumeratorCancellation] CancellationToken cancellationToken = default)
{
    await foreach (var job in context.Jobs.Where(job => job.Pipeline.Id == pipelineId)
        .AsAsyncEnumerable()
        .WithCancellation(cancellationToken)
        .ConfigureAwait(false))
    {
        yield return job;
    }
}
Run Code Online (Sandbox Code Playgroud)

我很难理解取消令牌的去向,并且有一种挥之不去的感觉,我在太多地方使用了它。

当您解构所有奇特的异步内容时,这里实际上发生了什么?还有没有更好的方法来编写这个函数?

c# async-await c#-8.0 iasyncenumerable ef-core-3.0

6
推荐指数
1
解决办法
4615
查看次数

Visual Studio预构建事件直到完成才写入输出窗口

我从预构建事件中调用python脚本,如下所示: py -3 "$(SolutionDir)/build.py"

现在的问题是,在脚本完成之前,脚本的输出不会写入visual studio的输出窗口.该脚本在第一次运行时可能需要几分钟,因此我想看看它的工作原理.

有没有办法使输出窗口与脚本的输出保持同步?

c# visual-studio visual-studio-2017

5
推荐指数
0
解决办法
261
查看次数

如何强制匹配的返回类型为()?

在下面的简化示例中,编译器抱怨match语句的一个分支返回bool,而另一个分支返回()

use std::collections::{HashMap, HashSet};

fn main() {
    let available = HashMap::from_iter([(2, "b"), (3, "c"), (4, "d")]);
    let mut set = HashSet::new();
    
    for i in [1, 2, 3, 4, 5] {
        match available.get(&i) {
            Some(s) => set.insert(*s),
            None => ()
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

但这会导致错误:

error[E0308]: `match` arms have incompatible types
  --> src/main.rs:10:21
   |
8  | /         match available.get(&i) {
9  | |             Some(s) => set.insert(*s),
   | |                        -------------- this is found to be of type …
Run Code Online (Sandbox Code Playgroud)

rust

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

将只读导航属性配置为构造函数参数

我有以下型号:

public class Session
{
    public string Id { get; set; }

    public IList<SessionWorkspace> Workspaces { get; } = new List<SessionWorkspace>();
}
Run Code Online (Sandbox Code Playgroud)
public class SessionMeasurement
{
    public SessionMeasurement(Session session, string measurement)
    {
        Session = session;
        Measurement = measurement;
    }

    public string Id { get; set; }

    public Session Session { get; }
    public string Measurement { get; }
}
Run Code Online (Sandbox Code Playgroud)

但我正在努力配置它们而不出现错误。当我这样做时:

modelBuilder
    .Entity<Session>(entityBuilder =>
    {
        entityBuilder
            .HasMany(s => s.Workspaces)
            .WithOne(sw => sw.Session);
    });

modelBuilder.Entity<SessionWorkspace>(entityBuilder =>
{
    entityBuilder
        .Property(sw => sw.Session);
    entityBuilder …
Run Code Online (Sandbox Code Playgroud)

c# database entity-framework-core

4
推荐指数
1
解决办法
916
查看次数

将数据存储在指针的最高有效位中

我发现了一些关于标记指针的信息,其中(ab)使用类型的对齐要求将数据位存储在未使用的最低有效位中.

我想知道,你不能对64位系统中最重要的位做同样的事情吗?即使你要使用64位指针的16个最高位,你仍然需要超过256太字节的RAM来重叠它们.

我知道理论上这是未定义的行为,但是在一些常见的操作系统(Windows/Max/Linux)中,这会如何表现?

是的,我知道这是邪恶和危险的,但这不是这个问题的意思.这是一个关于将计算机程序推向极限的"假设"问题,而不是关于理智和便携式软件设计的问题.

c c++ pointers

3
推荐指数
1
解决办法
465
查看次数

从每行的开头删除制表符和空格

我有包含代码的字符串,前面可以有空格(制表符和空格):

        for foo in bar:
            foo += 1
            for i in range(0, foo):
                print(foo * foo)
Run Code Online (Sandbox Code Playgroud)

由于空格在python中定义了范围,因此无法编译.那么,只有在每一行的开头都删除空格的唯一方法是,如果它出现在字符串中的每一行上,给出以下结果:

for foo in bar:
    foo += 1
    for i in range(0, foo):
        print(foo * foo)
Run Code Online (Sandbox Code Playgroud)

代码在同一个python程序中生成和编译,因此不允许其他工具.

python python-3.x

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

如何为模块指定与板条箱不同的名称

我有一个相当大的库,我想将其分成多个较小的板条箱,但我仍然想保留相同的模块名称。

假设我有一个名为 的库xyz,我想将它分成以下几个箱子:

  • xyz-core
  • xyz-graphics
  • xyz-audio
  • xyz-input

我怎样才能使模块仍然可用,如下所示:

  • xyz::core::*
  • xyz::graphics::*
  • xyz::audio::*
  • xyz::input::*

而不是把它变成这样:

  • xyz_core::*
  • xyz_graphics::*
  • xyz_audio::*
  • xyz_input::*

我还希望能够使用xyz::*包内的语法来引用包内容。所以xyz-graphics可以参考xyz-core使用xyz::core::*等。

rust rust-cargo

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

非整数2个整数的打包集

我有一组整数,每个整数都有特定的范围:

foo = [1, 5]
bar = [1, 10]
baz = [1, 200]
Run Code Online (Sandbox Code Playgroud)

我可以根据它们可以具有的不同状态的数量来计算分别存储每个数字需要多少位:

foo = 5 possible states   ~ 3 bits
bar = 10 possible states  ~ 4 bits
baz = 200 possible states ~ 8 bits
Run Code Online (Sandbox Code Playgroud)

这总共给了我15位。但是每个数字都有一个未使用的范围,导致空间浪费。相反,我可以通过计算所有组合数字的所有可能状态来计算整个集合所需的位:

5 * 10 * 200 = 10000 possible states ~ 14 bits
Run Code Online (Sandbox Code Playgroud)

这可以为我节省很多!

这就是我的问题所在:使用这种类型的布局加载和存储数字的最佳方法是什么?

compression algorithm integer bit-manipulation

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

模式匹配 switch 语句是否保证按顺序发生?

在下面的代码中,result保证是1,或者没有顺序保证并且它也可以返回 吗2

record Foo
{
    bool X { get; init; }
    bool Y { get; init; }
    bool Z { get; init; }
}

var foo = new Foo { X = true, Y = true };
var result = foo switch
{
    { X: true } => 1,
    { Y: true } => 2,
    { Z: true } => 3,
    _ => 0
}
Run Code Online (Sandbox Code Playgroud)

c# pattern-matching

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

std::coroutine_handle 线程安全吗?

std::coroutine_handle标准中是否有任何部分被定义为线程安全的?

例如,我可以看到std::coroutine_handle::done()使用原子变量来实现,这将允许在不首先锁定所有内容的情况下进行完成检查。

但是,如果标准中没有定义与线程安全相关的内容,那么我将不得不假设最坏的情况并始终锁定所有内容。

c++ c++20 c++-coroutine

0
推荐指数
1
解决办法
333
查看次数