261得票11回答
何时应该使用TaskCompletionSource<T>?

据我所知,它只知道在某个时间点调用了其SetResult或SetException方法以完成通过其Task属性公开的Task&lt;T&gt;。 换句话说,它充当Task&lt;TResult&gt;和其完成的生产者。 我在这里看到了以下示例: 如果我需要一种异步执行Func&lt;T...

257得票7回答
C#中的Task.FromResult<TResult>有什么用途?

在C#和TPL(Task Parallel Library)中, Task 类表示产生类型为T的值的正在进行的工作。 我想知道Task.FromResult方法的必要性是什么? 也就是说,在已经拥有生成的值的情况下,为什么需要将其重新包装到任务中? 唯一想到的是它被用作其他接受Task实...

240得票4回答
Parallel.ForEach与Task.Run和Task.WhenAll的区别

使用 Parallel.ForEach 或 Task.Run() 来异步启动一组任务有什么区别? 版本 1:List&lt;string&gt; strings = new List&lt;string&gt; { &quot;s1&quot;, &quot;s2&quot;, &quot;s...

233得票8回答
创建一个已完成的任务

我想创建一个已完成的Task(不是 Task&lt;T&gt;)。.NET中是否有内置的方法可以实现这一点? 相关问题: 创建已完成的 Task&lt;T&gt;

230得票4回答
Task构造函数中的取消令牌:为什么需要?

某些 System.Threading.Tasks.Task 的构造函数会将 CancellationToken 作为参数传入: CancellationTokenSource source = new CancellationTokenSource(); Task t = new Task...

228得票11回答
并行.ForEach中嵌套等待(await)

在一个 Metro 应用中,我需要执行多个 WCF 调用。由于需要进行大量的调用,因此我需要在并行循环中执行它们。但是问题在于,在 WCF 调用完成之前并行循环就已经退出了。 你会如何重构代码以满足预期功能?var ids = new List&lt;string&gt;() { "1", ...

223得票12回答
.NET 4.0 中没有 ConcurrentList<T> 吗?

看到 .Net 4.0 中新增的 System.Collections.Concurrent 命名空间,我感到非常兴奋,这很棒!我见过ConcurrentDictionary、ConcurrentQueue、ConcurrentStack、ConcurrentBag 和 BlockingCol...

221得票6回答
Task.Start/Wait和Async/Await有什么区别?

我可能有所遗漏,但是做以下两种操作有什么区别: public void MyMethod() { Task t = Task.Factory.StartNew(DoSomethingThatTakesTime); t.Wait(); UpdateLabelToSayItsComp...

214得票7回答
何时应该处理CancellationTokenSource?

CancellationTokenSource类是可释放的。在Reflector中快速查看证明了KernelEvent的使用,这是一个(很可能是)非托管资源。 由于CancellationTokenSource没有终结器,如果我们不处理它,垃圾回收程序也不会这样做。 另一方面,如果您查看MS...

190得票5回答
异步/等待与后台工作者的区别

在过去的几天中,我测试了.net 4.5和c# 5的新功能。 我喜欢它的新async/await特性。之前我使用BackgroundWorker在后台处理长时间的进程,并保持UI响应。 我的问题是:有了这些很好的新特性后,何时应该使用async/await,何时应该使用Background...