64得票2回答
TPL Dataflow,Post()和SendAsync()之间的功能区别是什么?

我对通过Post()或SendAsync()发送项目的区别感到困惑。我的理解是,无论何时,一旦一个项目达到数据块的输入缓冲区,控制权就会返回给调用上下文,对吗?那么我为什么需要SendAsync呢?如果我的假设不正确,那么相反的是,如果使用数据块的整个思路是建立并发和异步环境,那么为什么有人要...

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...

7得票1回答
泛型ContinueWith上的模棱两可调用

我正在编写一个简单的C#控制台应用程序,它使用异步任务和Entity Framework(打算在Linux(RHEL)下运行它,但这是另一项挑战)。请注意,我针对的是.NET 4.0,因此我使用.ContinueWith()而不是await。 下面是该应用程序的全部内容,包括EF数据库模型和...

22得票3回答
任务长时间运行会产生哪些副作用?

如果使用LongRunning选项创建任务,由于其不使用线程池,是否会产生任何副作用?

8得票2回答
使用TPL Dataflow封装以动作块结束的管道。

TPL Dataflow 提供了一个非常实用的功能: public static IPropagatorBlock<TInput, TOutput> Encapsulate<TInput, TOutput>( ITargetBlock<TInput&gt...

16得票4回答
如何(以及是否)使用TPL编写单消费者队列?

最近我听了很多关于.NET 4.0中TPL的播客。大多数描述后台活动,例如下载图像或进行计算,使用任务使得工作不会干扰GUI线程。 我处理的大部分代码更多地具有多生产者/单消费者的特点,其中来自多个源的工作项必须排队,然后按顺序进行处理。一个例子是日志记录,其中来自多个线程的日志行被顺序化到...

13得票3回答
Task.Run和Task.Factory.StartNew之间异常处理的不同

我在使用Task.Factory.StartNew时遇到了一个问题,尝试捕获抛出的异常。 我的应用程序中有一个长时间运行的任务,我想将其封装在Task.Factory.StartNew(..,TaskCreationOptions.LongRunning);中。 然而,当我使用Task.Fa...

10得票3回答
如何捕获CancellationToken.Register回调函数的异常?

我正在使用异步I/O与HID设备通信,当超时时,我想抛出一个可捕获的异常。我有以下读取方法: public async Task<int> Read( byte[] buffer, int? size=null ) { size = size ?? buffer.Leng...

378得票5回答
同步等待异步操作,为什么在此使用Wait()会导致程序冻结

前言:我正在寻找一种解释,而不仅仅是一个解决方案。我已经知道了解决方案。 尽管花费了几天时间学习有关任务异步模式(TAP)、async和await的MSDN文章,但我仍对某些细节感到有些困惑。 我正在为Windows Store应用程序编写日志记录器,并且希望支持异步和同步记录。异步方法遵...

7得票1回答
将async/await转换为Task.ContinueWith

这个问题是由此问题的评论引起的: 如果没有使用Microsoft.Bcl.Async,如何将非线性async/await代码回退到.NET 4.0? 在链接的问题中,我们有一个WebRequest操作,如果它一直失败,我们想要重试有限次数。 Async/await代码可能看起来像这样: ...