这是场景:
有客户端向服务器发送请求(它将是套接字或 wcf 服务器,这并不重要)。
服务器将保持一个开放的双工通道,并将使用它来向客户端发送答案(序列化数据)。服务器将处理请求并涉及查询生成(基于请求的参数)和针对各种类型的数据源(sql server、文件系统、分析服务服务器 - olaps、离线多维数据集等)的执行。如此繁重的 IO 绑定任务 - 肯定经常长时间运行。
性能很重要,同时考虑成百上千个请求。它必须是可扩展的。
我从未使用过 TPL,也从未编写过异步服务器。但是这几天我读了很多书,但......仍然无法理解它。
- TPL(4.0,而不是 4.5)在这里是一个不错的选择吗?
- 我应该为到达服务器的每个请求创建 tpl 任务吗?(用于异步处理)
- 我应该使用 LongRunning 选项创建这些任务吗?(所以不涉及线程池)
- 我应该为请求实现任何队列机制吗?如何?
- 我应该将请求处理的所有部分(a. 查询生成 b. 针对数据源的查询执行)与单独的任务(延续)链接起来,还是可以对两者使用单个任务 a. 和b.?
- 我应该使用 .FromAsync 任务生成来执行查询吗?还是标准的 .StartNew 就足够了?
- 考虑到上述要求,我还应该注意哪些其他重要方面?