【发布时间】:2015-05-10 18:30:27
【问题描述】:
我正在使用从 Google Big Query 获取数据的 ASP.NET MVC 5。由于 Google Big Query 的设计方式,如果作业未完成,我需要轮询结果。这是我的代码,
var qr = new QueryRequest
{
Query = string.Format(myQuery, param1, param2)
};// all params are mine
var jobs = _bigqueryService.Jobs;
var response = await jobs.Query(qr, _settings.GoogleCloudServiceProjectId).ExecuteAsync();
var jobId = response.JobReference.JobId;
var isCompleted = response.JobComplete == true;
IList<TableRow> rows = response.Rows;
while (!isCompleted)
{
var r = await jobs.GetQueryResults(_settings.GoogleCloudServiceProjectId, jobId).ExecuteAsync();
isCompleted = r.JobComplete == true;
if (!isCompleted)
{
Thread.Sleep(100);
}
else
{
rows = r.Rows;
}
}
看看这段代码,有人可以告诉我在这个上下文中调用 Thread.Sleep 是否好,或者我应该不断消耗 CPU 周期。
【问题讨论】:
-
没有。使用
Task.Delay(),这样您就不会因捆绑线程而扼杀可伸缩性。 -
@Crowcoder 你能不能通过更新我的代码来回答这个问题。
-
@Crowcoder 你的意思是
await Task.Delay(100); -
是的,等待。这将需要一些重构。如果我现在有时间,我会写一个答案,但 Google 和 Stephen Cleary 会帮助你。 blog.stephencleary.com/2012/02/async-and-await.html
标签: c# asp.net asp.net-mvc async-await google-bigquery