小编Sup*_*JMN的帖子

使用Rx和SelectMany限制并发请求

我有一个我想要同时下载的页面的URL列表HttpClient.URL列表可能很大(100或更多!)

我目前有这个代码:

var urls = new List<string>
            {
                @"http:\\www.amazon.com",
                @"http:\\www.bing.com",
                @"http:\\www.facebook.com",
                @"http:\\www.twitter.com",
                @"http:\\www.google.com"
            };

var client = new HttpClient();

var contents = urls
    .ToObservable()
    .SelectMany(uri => client.GetStringAsync(new Uri(uri, UriKind.Absolute)));

contents.Subscribe(Console.WriteLine);
Run Code Online (Sandbox Code Playgroud)

问题是:由于使用的原因SelectMany,几乎同时创建了大量的任务.似乎如果URL列表足够大,很多任务会给出超时(我得到"任务被取消"例外).

所以,我认为应该有一种方法,可能使用某种调度程序,来限制并发任务的数量,在给定时间不允许超过5或6.

通过这种方式,我可以获得并发下载而无需启动太多可能会失速的任务,就像他们现在所做的那样.

如何做到这一点,我不会因为大量的超时任务而饱和?

十分感谢.

.net c# concurrency reactive-programming system.reactive

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

如何断言Observable不会推送任何项目?

我想知道如何单元测试序列Observable.Never.

我怎么能确定没有任何东西被推到序列中?

.net c# system.reactive observable

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

在Entity Framework Core中选择SelectMany + Select之后不能正常工作

我有使用Entity Framework Core(v2)的查询,但是Include/ ThenInclude不能像我预期的那样工作.这是查询:

 var titlesOwnedByUser = context.Users
                   .Where(u => u.UserId == userId)
                   .SelectMany(u => u.OwnedBooks)
                   .Select(b => b.TitleInformation)
                   .Include(ti => ti.Title)
                   .ThenInclude(n => n.Translations);
Run Code Online (Sandbox Code Playgroud)

该查询有效,但我得到的标题设置为标题null.

只是为了澄清这些课程

class User 
{
     public int Id { get; set; }
     public List<BookUser> OwnedBooks { get; set; }
}

class Book 
{
    public int Id { get; set; }
    public TitleInformation TitleInformation { get; set; }
    public List<BookUser> Owners { get; set; }
}

class BookUser 
{
     public int …
Run Code Online (Sandbox Code Playgroud)

c# entity-framework iqueryable entity-framework-core

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

一切似乎都是一个聚合根

我想为餐厅的菜单组合建模。我围绕 3 个概念创建了一个非常小的有界上下文:Menu, Category, Product.

菜单由不同的产品组成,每个菜单中的每个产品都放在某个类别下(例如,类别是“参赛者”、“第一道菜”、“第二道菜”、“甜点”……)。

问题是一切对我来说都像是一个实体

例如,删除菜单时,不会删除任何产品或类别。其他 3 个概念也会发生同样的情况。

关于 UI,菜单将像层次结构一样被使用:

Menu1
    Category1
        Product1
        Product2
    Category2
        Product3
        Product4
Run Code Online (Sandbox Code Playgroud)

我想知道如何建模这个。我应该把它们做成 3 个聚合体吗?那么,应该如何编写菜单才能像上面的层次结构一样被消费?

谢谢。

domain-driven-design

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

暴露泛型过载的接口.怎么在这里干?

我有这个界面

interface IMyInterface 
{
    object Create(Type t);
}
Run Code Online (Sandbox Code Playgroud)

为方便起见,我还会包含一个包含调用方法的泛型重载,因此它变为:

interface IMyInterface 
{
    object Create(Type t);
    T Create<T>();
}
Run Code Online (Sandbox Code Playgroud)

新方法将像这样实现

public object Create<T>()  
{
    return (T) Create(typeof(T)); 
}
Run Code Online (Sandbox Code Playgroud)

方法的问题:

  • 如果在接口中包含重载,那么我强制实现者有一个总是相同的愚蠢的包装方法.
  • 如果我不包含重载,则在使用引用时会丢失调用的能力IMyInteface

我该如何解决这个设计问题?

.net c# generics interface

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

可观察到循环推送值列表

我想创建一个Observable,每秒都会持续推送一个值列表t.

例如,鉴于{1,2,3,4}订阅者应该得到这个:

1,2,3,4,1,2,3,4,1,2,3,4,1,2 ......

class Program
{
    static void Main()
    {
        var observable = Observable
            .Interval(TimeSpan.FromSeconds(3))
            .Zip(Observable.Range(1, 4)
            .Repeat(), (_, count) => count);

        observable.Subscribe(Console.WriteLine);

        Console.WriteLine("Finished!");
    }
}
Run Code Online (Sandbox Code Playgroud)
  • 我已经研究过这个例子,它似乎有效,但是有一个非常讨厌的问题:Main方法永远不会结束它的执行!为什么?:(

  • 更糟糕的是,几分钟后,这个控制台应用程序抛出一个OutOfMemoryException!

.net c# system.reactive

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

Reactive Extensions:使用适用于文件的Rx创建管道

我有一个包含3个步骤的流程管道:

  1. 视频到图像:我有一个视频转换为静止图像(帧)
  2. zip文件的帧:当视频中的所有帧都已处理完毕后,我应该用它们创建一个Zip文件.
  3. zip文件=>上传到FTP

它涉及2个一次性用品:视频捕获和zip文件.

我怎么能用Rx处理它?有任何想法吗?很抱歉没有发布任何代码,我不知道如何开始.

提前致谢!

.net c# idisposable ziparchive system.reactive

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

SSH.NET无法处理我的Shell输入命令

我正在使用SSH.NET从C#中的控制台应用程序连接到我的Raspberry Pi。

我想从我自己的流中发送文本,并通过StreamWriter

问题是它什么也不做。就像WriteLine("ls")不会产生任何效果。

这是代码:

using System;
using System.IO;
using Renci.SshNet;

namespace SSHTest
{
    class Program
    {
        static void Main(string[] args)
        {

            var ssh = new SshClient("raspberrypi", 22, "pi", "raspberry");
            ssh.Connect();

            var input = new MemoryStream();
            var streamWriter = new StreamWriter(input) { AutoFlush = true };

            var shell =
                ssh.CreateShell(input, Console.OpenStandardOutput(), new MemoryStream());
            shell.Start();

            streamWriter.WriteLine("ls");

            while (true)
            {               
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

有什么问题?

谢谢是提前:)

.net c# ssh stream ssh.net

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

Entity Framework Core 中带有过滤器的复杂查询

我有一个只有 3 个类的模型:User,FilterFilterEntry.

class Filter 
{
    public List<FilterEntry> Inclusions { get; set; } 
    public List<FilterEntry> Exclusions { get; set; } 
}

public class FilterEntry
{
    public string Name { get; set; }
    public int? Age { get; set; }
}

public class User 
{
    public string Name { get; set; }
    public int Age { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

一个Filter是被持久化到数据库过滤器,你可以看到它像一个过滤器的定义。它包含一个或多个FilterEntries定义过滤器。Inclusions 和 Exclusions 是适用于过滤器的限制。

一个例子:

var filter = new Filter 
    { …
Run Code Online (Sandbox Code Playgroud)

c# entity-framework filter entity-framework-core

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

是否可以从UWP应用程序格式化/创建分区?

我创建了一个处理WPF中低级别磁盘操作的应用程序.我会考虑将其移植到UWP,但我认为这个平台是强沙盒的,不支持需要提升的操作(以管理员身份运行).

它甚至可能吗?

.net c# win-universal-app windows-10 uwp

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