c# - 异步编码-等待所有返回-性能

标签 c# asp.net asynchronous

我的代码类似于下面的伪代码:

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/

相关文章:

c# - 运行 C# clickonce 控制台应用程序

c# - 将调试器附加到 IIS 实例

javascript - 尽管收到有效的操作有效负载(异步身份验证调用),为什么我的 Redux 状态没有更新

node.js - 意外行为 - IIFE 需要时异步等待?

c# - 带有空值字典的 ObjectDataSource Gridview 插入失败

javascript - 为什么我的 promise 的 'resolve' 在函数结束执行之前被发送?

c# - WP7 中的可滚动文本框(Skype 和 Facebook)

c# - 如何在C#中验证图像文件格式

c# - EntityFramework 更新或插入中文或非英文文本

c# - 使用 JavaScriptSerializer 将实体映射到 JSON