- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我在 TPL 数据流上使用顺序管道构建,它由 3 个块组成:
最佳答案
解决方案很简单,但在我得到它之前花了我几轮,因为在 Microsoft 站点上基本库信息背后没有太多信息。
希望它可以帮助某人。该解决方案可以轻松地重新配置以满足其他要求。
提出的方法依赖于:
CancellationTokenSource
表示关机。CancellationTokenSource
发出关闭信号。目的。 CancellationTokenSource
进行初始化。对象 using Microsoft.VisualStudio.TestTools.UnitTesting;
using System;
using System.Threading;
using System.Threading.Tasks.Dataflow;
using System.Threading.Tasks;
using System.Diagnostics;
namespace Tests.Sets.Research
{
[TestClass]
public class TPLTest
{
public class PipeLine
{
CancellationTokenSource cancellationTokenSource;
TransformBlock<int, int> b1, b2;
ActionBlock<int> bFinal;
static int SimulateWork(String blockName, int message, CancellationTokenSource cancellationTokenSource)
{
try
{
Thread.Sleep(100);
Trace.WriteLine($"{blockName} processed: {message}");
}
catch (Exception ex)
{
Trace.WriteLine($"Fatal error {ex.Message} at {blockName}");
cancellationTokenSource.Cancel();
}
return message;
}
public PipeLine(CancellationTokenSource cancellationTokenSource)
{
this.cancellationTokenSource = cancellationTokenSource;
// Create three TransformBlock<int, int> objects.
// Each blocks <int, int> object calls the SimulateWork method.
Func<string, int, CancellationTokenSource, int> doWork = (name, message, ct) => SimulateWork(name, message, ct);
b1 = new TransformBlock<int, int>((m1) => doWork("b1", m1, cancellationTokenSource),
new ExecutionDataflowBlockOptions() { MaxDegreeOfParallelism = 1 , CancellationToken = cancellationTokenSource.Token}); //discard messages on this block if cancel is signaled
b2 = new TransformBlock<int, int>((m1) => doWork("b2", m1, cancellationTokenSource), new ExecutionDataflowBlockOptions() { MaxDegreeOfParallelism = 1 });
bFinal = new ActionBlock<int>((m1) => doWork("bFinal", m1, cancellationTokenSource), new ExecutionDataflowBlockOptions() { MaxDegreeOfParallelism = 1 });
b1.LinkTo(b2, new DataflowLinkOptions { PropagateCompletion = true });
b2.LinkTo(bFinal, new DataflowLinkOptions { PropagateCompletion = true });
}
internal void Complete()
{
b1.Complete();
}
public void waifForCompletetion()
{
Trace.WriteLine($"Waiting for pipeline to end gracefully");
bFinal.Completion.Wait();
Trace.WriteLine($"Pipeline terminated");
}
public void submitToPipe(int message)
{
if (cancellationTokenSource.IsCancellationRequested)
{
Trace.WriteLine($"Message {message} was rejected. Pipe is shutting down.Throttling meanwhile");
return;
}
b1.SendAsync(message);
}
}
[TestMethod]
public void TestShutdown()
{
var cancellationTokenSource = new CancellationTokenSource();
var pipeLine = new PipeLine(cancellationTokenSource);
//post failure in 2 seconds.
//It would be the same if was signal from inside block 2
Task.Factory.StartNew(async () =>
{
await Task.Delay(2000);
Console.WriteLine("Time to shutdown the pipeline!");
cancellationTokenSource.Cancel();
});
//send requests to pipe in background for 5 seconds
Task.Run(async () =>
{
for (int i = 1; i < 100; i++)
{
if (cancellationTokenSource.IsCancellationRequested)
break;
Thread.Sleep(50); //to see pipe closing input
pipeLine.submitToPipe(i);
}
pipeLine.Complete();
});
pipeLine.waifForCompletetion();
}
}
}
b2 processed: 13
b1 processed: 22
Message 45 was rejected. Pipe is shutting down.Throttling meanwhile
b2 processed: 14
bFinal processed: 8
b2 processed: 15
bFinal processed: 9
bFinal processed: 10
bFinal processed: 11
bFinal processed: 12
bFinal processed: 13
bFinal processed: 14
bFinal processed: 15
Pipeline terminated
关于c# - 如何以优雅的方式关闭发生致命异常的 TPL 数据流?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60450973/
我的电脑正确配置了 SSH,我在尝试克隆存储库时遇到了这个错误: 我运行这个命令来克隆存储库 git clone ssh://git-codecommit.us-west-2.amazonaws.co
我试图下载android源代码。但是遇到了一个问题。 # repo init -u https://android.googlesource.com/platform/manifest fatal:
尝试运行我 4 年前开发的 Rails 4 项目,从那时起我一直在维护,我遇到了下一个错误,该错误在启动时卡住了应用程序: machine stack overflow in critical reg
这个问题在这里已经有了答案: psql: FATAL: role "postgres" does not exist (32 个答案) 关闭上个月。 我正在设置 Postgresql 以与 Rail
我正在创建新分支并尝试推送该分支(我尝试了以下命令): git push --all -u git push origin NewBranch 但在这两种情况下我都会收到此错误: Permission
我尝试克隆这个 repo 几次,但得到了同样的错误。是不是因为它太大而我的连接速度很慢? $ git clone https://git01.codeplex.com/typescript Cloni
我正在尝试使用 http://danielmiessler.com/study/git/#website 设置 git管理我的网站。 我已经到了指令的最后一步:git push website +ma
当我使用快速启动方法安装Eucalyptus云时,我看到安装失败。以后检查日志文件时,遇到以下错误。 最佳答案 错误消息是: Invalid gateway due to subnet/netmask
黄色, 我尝试按照以下步骤设置选项“在没有用户名和密码的情况下访问(推送到)Github”。 https://medium.com/@amanze.ogbonna/accessing-pushing-
我很难用 postgres 设置 django。 这是我的设置.py: DATABASES = { 'default': { 'ENGINE': 'django.db.back
当我尝试从实时实例服务器访问数据库时出现此错误。有谁知道原因吗? 最佳答案 可能是你的硬盘没有可用空间 关于PostgreSQL:致命:XX000:无法写入初始化文件,我们在Stack Overflo
我正在尝试连接到我的 PostgreSQL 服务器,但 psql 提示我没有有效的客户端证书。以下是我创建证书的方式: 自签名服务器证书: openssl req -new -text -nodes
我团队中的其他人创建了一个新的 git 分支,提交并推送到我们使用的常用远程。当我尝试检查这个分支时,我得到了这个: % git checkout 12382 fatal: Cannot switch
我正在尝试让 TravisCI 自动部署我的 Hakyll 静态站点,根据 this guide . 这是我的存储库的设置方式。我有我的源代码分支,其中包含我的 hakyll 和 Markdown 文
尝试提交时 git commit -a -m "Huge update" 我明白了 fatal: could not parse HEAD Error When Committing 看完fatal:
我想在我的 flutter 应用程序上使用 fcm,所以在创建 firebase 控制台并在我的 gradle 中安装了一些依赖项之后,如下所示: build.gradle:项目 dependenci
我是 GIT 的初学者,现在遇到了一个大问题。我在另一台 PC 上提交并推送了一些文件,现在在我的家用 PC 上,git 坏了。 请看下面: $ git status fatal: failed to
我想从 github 上克隆一个项目到我的电脑上 D:\Projects> git clone https://github.com/***/***.git 但是在下载的时候,出现了几个致命的错误:
所以我尝试使用以下命令获取opencv_contrib: $ git clone https://github.com/Itseez/opencv_contrib 这给了我以下错误: fatal: d
这是我在pod文件中使用的行 pod'SDWebImage','〜> 3.8' 以前是 pod'SDWebImage','〜> 3.7' 我尝试了以下 pod安装 pod更新和 pod更新'SDWeb
我是一名优秀的程序员,十分优秀!