我的代码类似于下面的伪代码:
static int counter;
function GetCalculations()
{
for (x service calls)
{
service.BeginCalc(MyCallback);
Interlocked.Increment(counter);
}
while(counter > 0)
{
//Wait for all results to return
}
return;
}
static function MyCallback()
{
try
{
... process results
}
finally
{
Interlocked.Decrement(counter);
}
}
我的问题与上述代码中的等待有关(while (counter > 0))。这会是性能问题吗?我知道我正在(对远程 Web 服务)进行的多次调用至少需要几秒钟才能返回 - 我最好在 while 循环中引入类似 Thread.Sleep() 的东西,这样我只检查所有每四分之一秒左右返回一次?
我的直觉是,将线程休眠放入我的代码中有点味道,但我对这种代码的精通程度还不够高,无法说出这种或那种方式。
最佳答案
您可以使用任务并行库。它有易于使用的机制来等待任务
下面是来自 MSDN 的例子
Task[] tasks = new Task[3]
{
Task.Factory.StartNew(() => MethodA()),
Task.Factory.StartNew(() => MethodB()),
Task.Factory.StartNew(() => MethodC())
};
//Block until all tasks complete.
Task.WaitAll(tasks);
关于c# - 异步编码-等待所有返回-性能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8271442/