- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我正在尝试使用 the following custom task scheduler限制并发网络请求:
我是这样使用它的:
const int CONCURRENCY_LEVEL = 2;
static void Main()
{
TaskFactory factory = new TaskFactory(new LimitedConcurrencyLevelTaskScheduler(CONCURRENCY_LEVEL));
Task.WaitAll(new[] { factory.StartNew(() => SomeAction("first")), factory.StartNew(() => SomeAction("second")) });
Console.WriteLine("All tasks ended");
Console.Read();
}
static void SomeAction(string task)
{
Console.WriteLine(task + " task started");
Console.WriteLine(AnotherTask(task).Result);
Console.WriteLine(task + " task ended");
}
static async Task<string> AnotherTask(string task)
{
return await Task.Run(() =>
{
Console.WriteLine(task + " inner task started");
// imitate web requests
Thread.Sleep(200);
Console.WriteLine(task + " inner task ended");
return "ok";
});
}
问题是内部任务正在使用我的 LimitedConcurrencyLevelTaskScheduler
而不是默认的 TaskScheduler
。这会导致 self 阻塞,输出如下:
second task started
first task started
first inner task started
second inner task started
second inner task ended
first inner task ended
当我将 CONCURRENCY_LEVEL
更改为 3
或将 factory
更改为 Task.Factory
时,显然一切都是工作正常,输出如下:
first task started
second task started
first inner task started
second inner task started
second inner task ended
first inner task ended
ok
second task ended
ok
first task ended
All tasks ended
我无法更改SomeAction
中的代码。我还可以做些什么? Microsoft 示例中是否存在错误?
最佳答案
从自定义任务计划程序启动任务时指定TaskCreationOptions.HideScheduler
:
Task.WaitAll(new[]
{
factory.StartNew(() => SomeAction("first"), TaskCreationOptions.HideScheduler),
factory.StartNew(() => SomeAction("second"), TaskCreationOptions.HideScheduler)
});
来自 MSDN :
HideScheduler
Prevents the ambient scheduler from being seen as the current scheduler in the created task. This means that operations likeStartNew
orContinueWith
that are performed in the created task will seeDefault
as the current scheduler.
关于c# - 并发受限的 TaskScheduler 会阻塞自身,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28374605/
我有一个数据类型是 Monoid 的实例所以我可以得到很好的值(value)观组合: data R a = R String (Maybe (String → a)) instance Monoid
目标:我需要在权限非常有限的 AppDomain 中运行一些代码 - 它应该无法访问任何花哨或不安全的东西,除了少数我在别处定义的辅助方法。 我所做的:我正在创建一个具有所需基本权限的沙箱 AppDo
在我的 VPS 中,我不知道为什么,但是当我对另一个用户执行 su 时,我得到的是: root@deb64:~# su john $ 带选项卡的自动完成不起作用,甚至是命令源。示例: root@deb
我正在寻找一种方法,将二进制代码标记为“受限”,而代码是用swift编写的。 我特别要说的是,将这些标志设置到链接器以防止动态库加载: -Wl,-sectcreate,__RESTRICT,__res
这个问题在这里已经有了答案: Access restriction on class due to restriction on required library rt.jar? (15 个答案)
我正在寻找一个基于Web的JavaScript textarea编辑器,该编辑器支持诸如可选字体,文本颜色,段落对齐等标准功能。但是,有一个相当大的约束:格式应始终应用于所有文本,而不是部分文本。文本
我有以下查询: SELECT pro.* FROM tb_AutProposta pro, tb_AutParcelamento par WHERE pro.id = par.id 但是,想要将
我的问题实际上是一个逻辑问题,任务是将列表截断到 Racket 中的给定长度。也就是说,给定一个列表 (A B C),给定长度为 2,我想要一个新列表 (A B)。限制是我们有可用功能的限制列表,我将
我试图将 jQuery UI DatePicker 限制为仅当前年份,到目前为止它在 This Demo 处工作正常。 我使用以下代码来完成这项工作 $("#datepicker").datepick
我在 minikube 中启用了 podsecuritypolicy。默认情况下,它创建了两个 psp - 特权和受限。 NAME PRIV CAPS SELINUX
我使用 Google Cloud Endpoints 定义了一个简单的 API: @Api(name = "realestate", version = "v1") public class Real
我在Tableau中设计可视化,我的数据在Hive/hadoop中,数据量很大, 当我尝试设计可视化时,查询运行非常非常慢,因为每次它尝试从 hadoop 中提取数据。 所以对于任何可视化,简单的拖放
我已经在这个问题上停留了一段时间。我正在尝试访问我使用 HttpClient 和 Tomcat 7 实现的 ContainerServlet。我不断收到错误消息“Restricted(Containe
由于使用了太多的 Websphere Message Broker 实例或类似的东西,我们刚刚用完了 Linux 机器上的信号量。 我和一位同事想知道为什么这甚至是有限的 - 这只是一点内存,对吧?
我正在尝试复制 boost::variant二维矢量转化为array .使用指令 copy(vectorName.begin(), extentName); .首先我得到错误,因为矢量类型是 vari
我的数据库非常受 cpu 限制,我找不到问题的根本原因。我目前有两个应用程序服务器,每个服务器都有一个 Rails api,通过 ruby-pg gem 连接到 PostgreSQL。两个应用程序
我已经开始学习多核编程和开发并行算法。这可以通过在 Java 中使用多线程轻松完成。因此,我创建了两个包含 10 行内容的文本文件,如下所示: This is the first line in fi
Jinja 的 sandbox Zope 2 RestrictedPython 似乎解决了类似的问题。有没有办法对它们进行分层,即在 Jinja 环境中使用 RestrictedPython 策略?用
我在 Azure VNet 上有一个 HDInsight Hadoop 群集(Linux,单独部署)(使用 NSG 限制客户端 IP)。 Azure SQL 防火墙有一个名为“允许访问 Azure 服
这就是我想要做的:我想使用“_”函数以 gettext 兼容的方式为我的 zmi python 脚本启用 i18n 支持。 这是我到目前为止所做的。在我的 Zope 产品的模块中,我运行: impor
我是一名优秀的程序员,十分优秀!