正如Stephen Toub在这篇文章中解释的那样,当您向ActionBlock提交消息时,可以在调用ActionBlock.Post之前先执行ExecutionContext.Capture,将包含消息和ExecutionContext的DTO传递到块中,然后在消息处理委托内部使用ExecutionContext.Run在捕获的上下文上运行委托:
public sealed class ContextFlowProcessor<T> {
private struct MessageState {
internal ExecutionContext Context;
internal T Value;
}
private readonly ITargetBlock<MessageState> m_block;
public ContextFlowProcessor(Action<T> action) {
m_block = new ActionBlock<MessageState>(ms =>
{
if (ms.Context != null)
using (ms.Context) ExecutionContext.Run(ms.Context, s => action((T)s), ms.Value);
else
action(ms.Value);
});
}
public bool Post(T item) {
var ec = ExecutionContext.Capture();
var rv = m_block.Post(new MessageState { Context = ec, Value = item });
if (!rv) ec.Dispose();
return rv;
}
public void Done() …Run Code Online (Sandbox Code Playgroud) 假设我有具有以下方法的 Car 类:
Car 的目的是配置并返回 IDriverSession,应用程序的其余部分使用该 IDrivingSession 来驾驶汽车。如何对我的汽车进行单元测试?
看起来需要完成一系列操作才能调用 Go() 方法。但我想单独测试每种方法,因为它们都有一些重要的逻辑。我不想进行一堆像这样的单元测试
Test1: LoadGasoline, Assert
Test2: LoadGasoline, InsertKey, Assert
Test3: LoadGasoline, InsertKey, StartEngine, Assert
Test4: LoadGasoline, InsertKey, StartEngine, Go, Assert
Run Code Online (Sandbox Code Playgroud)
是否有更好的方法来对顺序逻辑进行单元测试,或者这是我的汽车设计的问题吗?
--- 编辑 ---- 感谢您的所有回答。正如许多人注意到的那样,我还应该对无效场景进行测试,我也有这些,但这个问题的重点是如何测试有效序列。
任何人都知道一本书或一个网站,其中包含一套简单的Haskell语法铁路图?
这样的东西,但用英语:
http://www.cs.uu.nl/wiki/pub/FP/CourseLiterature/haskellsyntax-main.pdf
"简单"是这里的关键词.正式的BNF太神秘,不能用作备忘单.
我需要一个在Windows下运行的尾部实用程序,它可以监视网络共享上的文件.我尝试过的那些在本地工作得很好,但没有超过SMB.
尽管“BLAH”没有出现在匹配的字符串中,是否有可能有一个命名的捕获组总是具有“BLAH”的值?
实际上,我正在寻找类似于以下伪正则表达式的内容(注意假的 source=BLAH 语法):
^(?<source=BLAH>)$
Run Code Online (Sandbox Code Playgroud) 我听说在Microsoft SQL Server中有多种方法可以找到"最差"的存储过程:执行次数,CPU工作时间,队列等待时间等.
我正在寻找一种方法来找到最差(最慢/最常用)的UDF - 是否有DMV查询?
例如,来自将使您成为超级英雄的五个DMV查询的此查询按总工作时间返回前25个缓存的SP,这实际上意味着CPU压力的最昂贵的存储过程.
我如何为UDF写这样的东西?
SELECT TOP(25) p.name AS [SP Name], qs.total_worker_time AS [TotalWorkerTime],
qs.total_worker_time/qs.execution_count AS [AvgWorkerTime], qs.execution_count,
ISNULL(qs.execution_count/DATEDIFF(Second, qs.cached_time, GETDATE()), 0) AS [Calls/Second],
qs.total_elapsed_time, qs.total_elapsed_time/qs.execution_count
AS [avg_elapsed_time], qs.cached_time
FROM sys.procedures AS p
INNER JOIN sys.dm_exec_procedure_stats AS qs
ON p.[object_id] = qs.[object_id]
WHERE qs.database_id = DB_ID()
ORDER BY qs.total_worker_time DESC OPTION (RECOMPILE);
Run Code Online (Sandbox Code Playgroud) 我正在教我的12 yo 8086汇编语言,昨天我们正在谈论记忆,寻址和分割.我向他展示了如何将段可视化为从16字节边界开始的重叠64Kb块序列,其中偏移是段内的8080样式指针.然后他问了一个我无法回答的问题:为什么(为什么,有什么目的)它们重叠?
试图研究这个问题,我发现了20位数学的许多副本,以及一些模糊的提到这个方案可能允许的一些内存节省.有人可以详细说明内存节省部分吗?或任何其他方式来实现重叠的实际优势?
我想在表上创建一个索引,我试图根据列选择性来决定索引中列的顺序.
因此,最具选择性的列(最能缩小选择范围的列)将是索引中的第一列,其次是第二选择性列等.
如何计算色谱柱的选择性?
CouchDB采用酷炫模式,可用于多种其他场景.我在谈论map/reduce结果的持久B树索引.这个想法是预先计算聚合数据并将其存储在B树索引的不同级别.然后,索引可用于有效地查询聚合,而无需始终重新聚合所有数据.然后,如果任何叶级值发生更改,则只需重新计算通过树的上升路径.
例如,如果数据是随时间变化的价格,则索引可以在日,月和年级别存储SUM和COUNT项.然后,如果有人想要查询年初至今的平均价格,那么您所要做的就是总结自年度开始以来所有整月的所有商品数量和计数,加上上个月可用的所有日期,然后除以总和总计COUNT.如果过去的价格必须改变,则变化必须通过索引传播,但只需要更新相应的日期和月份和年份的值,即使这样,一年中其他日期和其他月份的值也可以重新用于计算.
这种方法的通用名称是什么?在任何流行的RDBMS中都存在类似的东西吗?有没有在实践中使用它的经验?
以下C#代码显示0.1-为什么?
var s = "0.1";
var dbl = Double.Parse(s);
var dcml = Convert.ToDecimal(dbl);
Console.WriteLine(dcml.ToString());
Run Code Online (Sandbox Code Playgroud)
0.01不是不能用二进制表示的,因此应该打印0.100000001490116吗?
indexing ×2
aggregation ×1
assembly ×1
async-await ×1
c# ×1
couchdb ×1
decimal ×1
dmv ×1
grammar ×1
haskell ×1
logging ×1
performance ×1
precision ×1
rdbms ×1
regex ×1
sql-server ×1
tpl-dataflow ×1
unit-testing ×1
utilities ×1
x86-16 ×1