冒着提出一个愚蠢问题的风险(如果我的同行认为这是一个愚蠢的问题,我会自愿删除这个问题)..
我有一个C#桌面应用程序。
我使用WCF服务将数据上传到我的服务器。
我正在尝试使用任务。
此代码调用我的网络服务......
Task t = Task.Run(() => { wcf.UploadMotionDynamicRaw(bytes); });
我正在对这行代码进行压力测试。
我在一段时间内在1秒钟内多次调用它。
这会淹没'我的路由器,如果互联网因任何原因而变慢?
我可以猜测会出现这种情况......
那么,如何在再次调用之前测试任务是否已完成?在执行此操作时,额外的管道会通过使用任务来减慢我的速度增益吗?
最后,正在使用使用多核的任务吗?
答案 0 :(得分:3)
如果互联网速度慢,这会“泛滥”我的路由器 原因是什么?
这取决于您上传的文件的大小和连接速度。为了解决这个问题,请运行。
那么,如何在调用之前测试任务是否已完成 再次?
您可以使用Task.ContinueWith函数(任何可用的重载)来“捕获”任务完成并运行其他一些方法,也可以在递归中。
在执行此操作时,额外的管道将减慢我的速度增益 使用任务?
这取决于您期望的工作量,处理器和时间。因此,换句话说,运行它来衡量,没有可能的通用答案。
正在使用使用多核的任务吗?
是的,每当它发现它是可能的。一个接一个地运行单个任务不会将单个功能工作分散到多个核心上。为此,您需要使用Parallel.For和类似的工件。再一次,.NET没有为您提供SIMD编排的机制,因此您不能保证将在多核上运行,但很可能会。