正确理解任务

时间:2014-12-31 16:51:29

标签: c# task-parallel-library

冒着提出一个愚蠢问题的风险(如果我的同行认为这是一个愚蠢的问题,我会自愿删除这个问题)..

我有一个C#桌面应用程序。

我使用WCF服务将数据上传到我的服务器。

我正在尝试使用任务。

此代码调用我的网络服务......

Task t = Task.Run(() => { wcf.UploadMotionDynamicRaw(bytes); });

我正在对这行代码进行压力测试。

我在一段时间内在1秒钟内多次调用它。

这会淹没'我的路由器,如果互联网因任何原因而变慢?

我可以猜测会出现这种情况......

那么,如何在再次调用之前测试任务是否已完成?在执行此操作时,额外的管道会通过使用任务来减慢我的速度增益吗?

最后,正在使用使用多核的任务吗?

1 个答案:

答案 0 :(得分:3)

  

如果互联网速度慢,这会“泛滥”我的路由器   原因是什么?

这取决于您上传的文件的大小和连接速度。为了解决这个问题,请运行。

  

那么,如何在调用之前测试任务是否已完成   再次?

您可以使用Task.ContinueWith函数(任何可用的重载)来“捕获”任务完成并运行其他一些方法,也可以在递归中。

  

在执行此操作时,额外的管道将减慢我的速度增益   使用任务?

这取决于您期望的工作量,处理器和时间。因此,换句话说,运行它来衡量,没有可能的通用答案。

  

正在使用使用多核的任务吗?

是的,每当它发现它是可能的。一个接一个地运行单个任务不会将单个功能工作分散到多个核心上。为此,您需要使用Parallel.For和类似的工件。再一次,.NET没有为您提供SIMD编排的机制,因此您不能保证在多核上运行,但很可能会。