我在该领域拥有自助服务终端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个多小时 - 才开始减速。重启后,我们恢复正常。
这些信息亭已部署了几个月,我们本周刚刚添加了异步逻辑。我们之前从未遇到服务器端的速度减慢。它就像第一个片段中的某些东西就是这样做的。