我正在使用任务工厂生成并行线程,我的代码如下.我有要求打印每个线程的完成时间,但不知道如何检查每个线程.目前我的代码正在等待所有任务完成,然后计算时间.
stp1.Start();
for (int i = 0; i < tsk.Length; i++)
{
tsk[i] = Task.Factory.StartNew((object obj) =>
{
resp = http.SynchronousRequest(web, 443, true, req);
}, i);
}
try
{
Task.WaitAll(tsk);
}
stp1.Stop();
Run Code Online (Sandbox Code Playgroud)
你可以添加一个延续Task.Continuation是一种在给定Task完成时调用的方法.
for (int i = 0; i < tsk.Length; i++)
{
tsk[i] = Task.Factory.StartNew((object obj) =>
{
resp = http.SynchronousRequest(web, 443, true, req);
}, i);
tsk[i].ContinueWith(antecedent=>
{
//antecedent is completed
//Do whatever here
});
}
Run Code Online (Sandbox Code Playgroud)
如果您需要为单个任务计时,每个任务需要一个秒表.你可以从StopWatch内部开始StartNew并将其停止ContinueWith.
如果这是您的实际代码,您可以简单地计时调用的同步操作(在本例中为http.SynchronousRequest).例如下面的代码就足够了.
for (int i = 0; i < tsk.Length; i++)
{
tsk[i] = Task.Factory.StartNew((object obj) =>
{
StopWatch watch = StopWatch.StartNew();
resp = http.SynchronousRequest(web, 443, true, req);
watch.Stop();
Console.WriteLine(watch.Elapsed);
}, i);
}
Run Code Online (Sandbox Code Playgroud)
顺便说一下,网络操作本质上是异步的; 将提供异步API,您可以使用它而不是在Task中包装同步Web请求.例如,也许吧HttpClient.SendAsync.
| 归档时间: |
|
| 查看次数: |
632 次 |
| 最近记录: |