189得票6回答
为什么我应该更喜欢单个的 'await Task.WhenAll' 而不是多个 awaits?

如果我不关心任务完成的顺序,只需它们全部完成,那么我是否应该使用await Task.WhenAll而不是多个await呢?例如,下面的DoWork2方法是否比DoWork1更可取(为什么)?using System; using System.Threading.Tasks; namesp...

186得票2回答
关于 Task.Start()、Task.Run() 和 Task.Factory.StartNew() 的使用。

我刚刚看到了关于TPL使用的三个例程,它们完成相同的工作;以下是代码:public static void Main() { Thread.CurrentThread.Name = "Main"; // Create a task and supply a user dele...

172得票5回答
为什么 CancellationToken 要与 CancellationTokenSource 分离?

我正在寻找一个解释为什么.NET引入了CancellationToken结构体,除了CancellationTokenSource类。 我理解如何使用API,但也想了解为什么以这种方式设计。 也就是说,为什么我们有:var cts = new CancellationTokenSource(...

165得票5回答
CancellationToken的默认参数

我有一些异步代码,想要添加一个CancellationToken。然而,并非所有情况都需要使用此功能,因此我想设置一个默认参数——可能是CancellationToken.None。但是, Task<x> DoStuff(...., CancellationToken ct = ...

158得票2回答
await和ContinueWith的区别

请问在下面的例子中,await和ContinueWith是否可以互换使用?这是我第一次尝试使用TPL,已经阅读了所有的文档,但不理解它们之间的区别。 Await:String webText = await getWebPage(uri); await parseData(webText); ...

152得票3回答
需要了解SemaphoreSlim的使用方法

这里是我目前的代码,但我不理解SemaphoreSlim在做什么。async Task WorkerMainAsync() { SemaphoreSlim ss = new SemaphoreSlim(10); List<Task> trackedTasks = n...

152得票5回答
如何等待Parallel.ForEach完成

我正在使用TPL来进行我的当前项目,并且使用Parallel.ForEach来启动多个线程。Task类包含Wait()方法,以等待任务完成。同样的,我该如何等待Parallel.ForEach完成后再执行下一条语句?

149得票12回答
如何限制并发异步I/O操作的数量?

// let's say there is a list of 1000+ URLs string[] urls = { "http://google.com", "http://yahoo.com", ... }; // now let's send HTTP requests to ea...

146得票6回答
在.NET 4.5中同时运行两个异步任务,并收集结果。

我已经尝试了一段时间,试图用.NET 4.5来完成一些我认为很简单的工作。 我想同时启动两个长时间运行的任务,并以最佳的C# 4.5(RTM)方式收集结果。 以下代码可以工作,但我不喜欢它,因为: - 我希望Sleep成为一个异步方法,这样它可以等待其他方法。 - 使用Task.Run(...

146得票4回答
返回void和返回Task有什么区别?(涉及IT技术)

在查看各种 C# Async CTP 示例时,我发现一些异步函数返回 void,而另一些则返回非泛型的 Task。 我可以理解返回 Task<MyType> 在异步操作完成后向调用方返回数据的有用性,但是我发现那些返回类型为 Task 的函数从来没有返回过任何数据。 为什么不返回 ...