【发布时间】:2013-01-17 18:10:42
【问题描述】:
这是场景:
有客户端向服务器发送请求(它将是套接字或 wcf 服务器,这并不重要)。
服务器将保持一个开放的双工通道,并使用它向客户端发送一个应答(序列化数据)。服务器将处理请求并涉及查询生成(基于请求的参数)和针对各种类型的数据源(sql server、文件系统、分析服务服务器 - olaps、离线多维数据集等)的执行。如此繁重的 IO 密集型任务 - 肯定经常长时间运行。
性能很重要,同时考虑成百上千个请求。它必须是可扩展的。
我从未使用过 TPL,也从未编写过异步服务器。但是这几天我读了很多书,但……仍然无法理解它。
- TPL(4.0,而不是 4.5)在这里是一个不错的选择吗?
- 是否应该为到达服务器的每个请求创建 tpl 任务? (用于异步处理)
- 我应该使用 LongRunning 选项创建这些任务吗? (所以不涉及线程池)
- 我应该为请求实现任何队列机制吗?怎么样?
- 我应该将请求处理的所有部分(a. 查询生成 b. 针对数据源的查询执行)与单独的任务(延续)链接起来,还是可以将单个任务用于两者 a.和b.?
- 我应该使用 .FromAsync 任务生成来执行查询吗?还是标准的 .StartNew 就够了?
- 考虑到上述要求,我还应该注意哪些其他重要方面?
【问题讨论】:
-
我认为您的问题过于笼统,无法正确回答。你问了很多问题,我认为大多数问题的答案是“视情况而定”。另外,如果你想异步,我真的会考虑使用 C# 5.0 和 .Net 4.5,或者至少 C# 5.0 和 .Net 4.0 和
Bcl.Async。 -
不幸的是只有 .NET 4.0
-
对于 .NET 4.0,您可以使用 ParallelExtensionsExtras code.msdn.microsoft.com/ParExtSamples blogs.msdn.com/b/pfxteam/archive/2010/04/04/9990342.aspx
-
嗯?它比stackoverflow.com/questions/869744/… 更有建设性吗?
标签: c# .net c#-4.0 asynchronous task-parallel-library