【发布时间】:2015-01-04 10:17:46
【问题描述】:
这可能是一个奇怪的问题,它确实是为了我的教育目的,所以我可以将它应用到未来可能出现的场景中。
我正在使用 C#。
我正在进行压力测试,所以这不是完全生产代码。
我通过网络服务将数据上传到我的服务器。
我使用 Run.Task 启动服务。
在允许下一个 Run.Task 开始之前,我会检查任务是否已完成。
这是在一个循环中完成的。
但是,因为我使用的是模块化声明的Task,结果会不会受到影响? 我可以声明一个本地 Task.Run 变量,但我想看看我在第一个问题上能走多远。
如果 Task.Run 可以引发事件表明它已完成,那么这可能不是问题吗?
这是我的代码:
//模块声明:
private static Task webTask = Task.Run(() => { System.Windows.Forms.Application.DoEvents(); });
//在通过定时器调用的函数中
if (webTask.IsCompleted)
{
//keep count of competed tasks
}
webTask = Task.Run(() =>
{
try
{
wcf.UploadMotionDynamicRaw(bytes); //my web service
}
catch (Exception ex)
{
//deal with error
}
);
【问题讨论】:
-
使用Task Continuation。有不同的莫迪。其中之一是在任务完成后做某事。 IMO 您不需要计时器 - 将您的代码更改为
webTask.ContinueWith...。 -
@pasty 嗨,感谢您的快速回复。我现在会看看这个并报告 - 谢谢:)
-
@pasty 所以当我修改我的代码时:
-
webTask = new Task(wcf.UploadMotionDynamicRaw(bytes));
-
它给了我一个错误'无法从'void'转换为'Action'?