C# 应用';使用';任务的关键字?
在MS文档中,我碰巧看到了这一部分,这让我感到奇怪,它使用Task表达式嵌套了C# 应用';使用';任务的关键字?,c#,C#,在MS文档中,我碰巧看到了这一部分,这让我感到奇怪,它使用Task表达式嵌套了。我以前从未见过,它具体实现了什么?给定任务对象并行运行,这有什么意义 using (BlockingCollection<int> bc = new BlockingCollection<int>()) { // Spin up a Task to populate the BlockingCollection using (Ta
。我以前从未见过,它具体实现了什么?给定任务
对象并行运行,这有什么意义
using (BlockingCollection<int> bc = new BlockingCollection<int>())
{
// Spin up a Task to populate the BlockingCollection
using (Task t1 = Task.Run(() =>
{
bc.Add(1);
bc.Add(2);
bc.Add(3);
bc.CompleteAdding();
}))
{
// Spin up a Task to consume the BlockingCollection
using (Task t2 = Task.Run(() =>
{
try
{
// Consume consume the BlockingCollection
while (true) Console.WriteLine(bc.Take());
}
catch (InvalidOperationException)
{
// An InvalidOperationException means that Take() was called on a completed collection
Console.WriteLine("That's All!");
}
}))
{
await Task.WhenAll(t1, t2);
}
}
}
使用(BlockingCollection bc=new BlockingCollection())
{
//启动任务以填充BlockingCollection
使用(任务t1=Task.Run(()=>
{
bc.增加(1);
bc.增加(2);
bc.增加(3);
完成添加();
}))
{
//启动任务以使用BlockingCollection
使用(Task t2=Task.Run(()=>
{
尝试
{
//使用BlockingCollection
while(true)Console.WriteLine(bc.Take());
}
捕获(无效操作异常)
{
//InvalidOperationException意味着对已完成的集合调用了Take()
Console.WriteLine(“仅此而已!”);
}
}))
{
等待任务时(t1,t2);
}
}
}
任务,因此此代码将在两个任务完成后立即处理它们(而不是因为等待任务。whalll(t1,t2);
行)。至于什么时候(99%的时间你都不知道)以及为什么你要处理Stephen Toub写的任务
这篇文章的下一句话是:
在.NET 4中,WaitHandle在以下几种情况下被延迟初始化:如果访问了任务的((IAsyncResult)Task).AsyncWaitHandle显式实现的接口属性,或者如果该任务被用作Task.WaitAll或Task.WaitAny调用的一部分,且任务尚未完成。这使得“我是否应该处理”问题的答案有点困难,因为如果您有许多任务与WaitAll/WaitAny一起使用,那么实际上处理这些任务可能会很好
从4.0(在async/await
之前)开始,BlockingCollection
可用(根据文档),因此,我假设Task.WaitAll
以前在文档中使用过,并且当文档被重写为wait Task时。当任何使用的那些被遗忘和/或离开,尽管不再需要了
随API文档中更改示例的建议一起提交,将查看我是否正确=)
UPD
PR已被接受并合并。任务,因此此代码将在两个任务完成后立即处理它们(而不是在之前,因为等待任务。whalll(t1,t2);
行)。至于什么时候(99%的时间你都不知道)以及为什么你要处理Stephen Toub写的任务
这篇文章的下一句话是:
在.NET 4中,WaitHandle在以下几种情况下被延迟初始化:如果访问了任务的((IAsyncResult)Task).AsyncWaitHandle显式实现的接口属性,或者如果该任务被用作Task.WaitAll或Task.WaitAny调用的一部分,且任务尚未完成。这使得“我是否应该处理”问题的答案有点困难,因为如果您有许多任务与WaitAll/WaitAny一起使用,那么实际上处理这些任务可能会很好
从4.0(在async/await
之前)开始,BlockingCollection
可用(根据文档),因此,我假设Task.WaitAll
以前在文档中使用过,并且当文档被重写为wait Task时。当任何使用的那些被遗忘和/或离开,尽管不再需要了
随API文档中更改示例的建议一起提交,将查看我是否正确=)
UPD
PR已接受并合并。任务可标识。任务可标识。