Task.WhenAll需要很长时间才能返回

时间:2014-04-25 19:39:53

标签: c# asynchronous async-await

我在该领域拥有自助服务终端C#应用程序,我们正努力提供一致的最终用户体验。其中一部分是展示一个简短的"处理"因为我们在3G网络上运行,所以在我们进行任何服务器通信时,屏幕至少需要2秒钟。以下是我使用的代码:

Stopwatch sw = new Stopwatch();
sw.Start();

Task t1 = Task.Delay(2000);
Task<Customer> t2 = Task.Run<Customer>(() =>
{
    return _client.LookupCustomer(cardNumber, pin);
});

await Task.WhenAll(t1, t2);
customer = t2.Result;
sw.Stop();
Log.InfoFormat("Time for ValidateCustomer {0}", sw.Elapsed.ToString());

以下是LookupCustomer的代码。 &#34; PayStationClient&#34;构造函数是空的,因此除了WCF在场景中所做的之外,没有其他隐藏的逻辑。

    public DTO.Customer LookupCustomer(string cardNumber, string PIN)
    {
        PayStationClient client = new PayStationClient();
        decimal accountBalance, availableWithdrawalAmount, maxDailyWithdrawalAmount;

        Stopwatch sw = new Stopwatch();
        sw.Start();

        bool isValid = client.ValidatePin(cardNumber, PIN, out accountBalance, out availableWithdrawalAmount, out maxDailyWithdrawalAmount);

        sw.Stop();
        Log.InfoFormat("Time for LookupCustomer {0}", sw.Elapsed.ToString());

        DTO.Customer customer = new DTO.Customer()
        {
            ResponseStatus = (isValid) ? null : new ResponseStatus("Invalid PIN"),
            AccountBalance = accountBalance,
            AvailableWithdrawalAmount = availableWithdrawalAmount,
            MaxDailyWithdrawalAmount = maxDailyWithdrawalAmount,
            CardNumber = cardNumber
        };

        return customer;
    }

问题是我的日志显示此时间> 20-30秒,而LookupCustomer中的单独日志记录(客户端)显示服务器调用正在返回&lt; 1-2秒。所有额外的时间去哪儿了?我对WhenAll错过了什么?

我忘了提及当信息亭第一次上线时,它似乎表现得像预期的那样。它只是在运行了一段时间后 - 8个多小时 - 才开始减速。重启后,我们恢复正常。

这些信息亭已部署了几个月,我们本周刚刚添加了异步逻辑。我们之前从未遇到服务器端的速度减慢。它就像第一个片段中的某些东西就是这样做的。

0 个答案:

没有答案