小编Tej*_*ora的帖子

我应该使用线程或任务 - 多客户端模拟

我正在编写一个客户端模拟程序,其中所有模拟客户端都针对服务器运行一些预定义的例程 - 这是一个在具有四个实例的azure中运行的Web服务器.

连接到服务器后,所有模拟客户端都运行相同的例程.

在任何时候,我都希望使用我的程序模拟300到800个客户端.

我的问题是:我应该创建N个客户端类实例并在N个不同的线程中运行它们吗?要么

我应该使用任务库来做这些事吗?

c# simulation multithreading task-parallel-library

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

使用async/await并使用TPL Dataflow返回yield

我正在尝试使用实现数据处理管道TPL Dataflow.但是,我对数据流相对较新,并不完全确定如何正确使用它来解决我想要解决的问题.

问题:

我试图遍历文件列表并处理每个文件以读取一些数据,然后进一步处理该数据.每个文件大致700MB1GB大小.每个文件都包含JSON数据.为了并行处理这些文件,而不是的运行内存,我试图使用IEnumerable<>yield return再进一步处理数据.

获得文件列表后,我希望一次最多处理4-5个文件.我的困惑来自:

  • 如何使用IEnumerable<>yeild return使用async/await和数据流.碰上了这个答案svick,但仍然不知道如何转换IEnumerable<>ISourceBlock,然后所有块连接在一起,并跟踪完成.
  • 在我的情况下,producer将非常快(通过文件列表),但consumer将非常慢(处理每个文件 - 读取数据,反序列化JSON).在这种情况下,如何跟踪完成情况.
  • 我应该使用LinkTo数据块的功能来连接各种块吗?或者使用诸如OutputAvailableAsync()和之类的方法ReceiveAsync()将数据从一个块传播到另一个块.

代码:

private const int ProcessingSize= 4;
private BufferBlock<string> _fileBufferBlock;
private ActionBlock<string> _processingBlock;
private BufferBlock<DataType> _messageBufferBlock;

public Task ProduceAsync()
{
    PrepareDataflow(token);
    var bufferTask = ListFilesAsync(_fileBufferBlock, token);

    var tasks = …
Run Code Online (Sandbox Code Playgroud)

c# ienumerable yield-return async-await tpl-dataflow

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

最佳实践以及如何在客户端的C#包装器中支持不同版本的REST API

我编写了一个C#包装器来支持我们公司项目的REST API.但是,这些API现在正在发生变化 - 就URL而言(可能会在URL中引入版本号)和它期望的数据对象并返回.

我想知道在我的c#wrapper中支持不同版本的REST API的最佳做法是什么.

我应该如何做 - 在代码设计和类定义方面 - 以便一个包装器可以与不同版本的API无缝协作 - 并且它也应该是可扩展的 - 以便将来可以轻松支持任何更新版本的API .

我编写的c#包装器正在使用我们的Web服务API.我已经在使用RestSharp客户端在c#wrapper中使用我们的Web服务API.

c# api rest version wrapper

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

多线程单生产者多个消费者实施

我想用单个生产者和多个消费者的模式实现多文件下载.

我有: - 找到要在循环中下载的新链接的代码 - 当找到新链接时 - 它调用下载功能 - 下载功能接受源文件路径和目标文件路径并下载文件.

我想做什么 - 我想同时下载X个文件(我不知道文件的总数) - 在任何时候我都应该能够同时下载X文件 - 只要1个X文件完成下载 - 调用函数应该能够立即添加新的下载 - 然后立即下载

  • 所以我有一个生产者函数,不断添加新的下载到队列(在任何时候最大X下载)
  • 多个X线程,它消耗下载并单独开始下载.一旦完成下载 - 生产者应该能够添加新的下载 - 这将产生新的线程.

举例非常感谢

c# queue multithreading producer-consumer

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