Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/306.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 应用';使用';任务的关键字?_C# - Fatal编程技术网

C# 应用';使用';任务的关键字?

C# 应用';使用';任务的关键字?,c#,C#,在MS文档中,我碰巧看到了这一部分,这让我感到奇怪,它使用Task表达式嵌套了。我以前从未见过,它具体实现了什么?给定任务对象并行运行,这有什么意义 using (BlockingCollection<int> bc = new BlockingCollection<int>()) { // Spin up a Task to populate the BlockingCollection using (Ta

在MS文档中,我碰巧看到了这一部分,这让我感到奇怪,它使用Task表达式嵌套了
。我以前从未见过,它具体实现了什么?给定
任务
对象并行运行,这有什么意义

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已接受并合并。

任务可标识。任务可标识。