ActionBlock 测试方法永远不会完成
ActionBlock test method never completes
我有以下小测试方法来玩ActionBlock。它按预期顺序写出跟踪消息,但从未完成。测试方法永不退出。
我在这里做错了什么?提前致谢。
[TestMethod]
public async Task ActionBlockTest()
{
var rnd = new Random(DateTime.Now.Millisecond);
var delay = new ActionBlock<int>(item =>
{
var start = DateTime.Now;
Trace.WriteLine(string.Format("{0:ss fff} item start processing ({1})", start, item));
return Task.Delay(item).ContinueWith(t => Trace.WriteLine(string.Format("{0:ss fff} item finished processing ({1}) took {2} ms", DateTime.Now, item, (DateTime.Now - start).TotalMilliseconds)));
}, new ExecutionDataflowBlockOptions
{
BoundedCapacity = 4,
MaxDegreeOfParallelism = 2
});
for(int i = 0; i < 8; i++)
{
var d = rnd.Next(100, 1000);
Trace.WriteLine(string.Format("{0:ss fff} posting {1}", DateTime.Now, d));
await delay.SendAsync(d);
}
await delay.Completion;
}
您需要致电
delay.Complete();
通知方块没有更多物品到达。然后,在处理完所有当前工作(如果有的话)之后,块将进入完成状态并且 delay.Completion
任务将完成。截至目前,您的 await delay.Completion
永远不会 return。
我有以下小测试方法来玩ActionBlock。它按预期顺序写出跟踪消息,但从未完成。测试方法永不退出。
我在这里做错了什么?提前致谢。
[TestMethod]
public async Task ActionBlockTest()
{
var rnd = new Random(DateTime.Now.Millisecond);
var delay = new ActionBlock<int>(item =>
{
var start = DateTime.Now;
Trace.WriteLine(string.Format("{0:ss fff} item start processing ({1})", start, item));
return Task.Delay(item).ContinueWith(t => Trace.WriteLine(string.Format("{0:ss fff} item finished processing ({1}) took {2} ms", DateTime.Now, item, (DateTime.Now - start).TotalMilliseconds)));
}, new ExecutionDataflowBlockOptions
{
BoundedCapacity = 4,
MaxDegreeOfParallelism = 2
});
for(int i = 0; i < 8; i++)
{
var d = rnd.Next(100, 1000);
Trace.WriteLine(string.Format("{0:ss fff} posting {1}", DateTime.Now, d));
await delay.SendAsync(d);
}
await delay.Completion;
}
您需要致电
delay.Complete();
通知方块没有更多物品到达。然后,在处理完所有当前工作(如果有的话)之后,块将进入完成状态并且 delay.Completion
任务将完成。截至目前,您的 await delay.Completion
永远不会 return。