繁体   English   中英

在ASP.NET中轮询Google Big Query结果期间调用Thread.Sleep是否很好? 备择方案?

[英]Is it good to call Thread.Sleep during polling Google Big Query results in ASP.NET? Alternatives?

我正在使用从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周期。

我不会在服务器端执行此操作,因为必须小心使用哪个等待调用,以避免在负载下消耗大量资源。

您的用户也不会从该页面获得任何反馈。 您可以通过显示旋转的车轮来改善这种情况,但是最好向用户显示实际进度。

更好的方法是对您的网站进行AJAX调用。 该调用可能返回诸如状态,经过时间和完成百分比之类的信息(请看一下BigTable的API)。 在这种情况下,您不需要执行任何Thread.SleepTask.Delay功夫。

编辑:
哦,您已经在使用AJAX! 只需撕下任何Thread.Sleep并立即将结果返回给用户即可。 在浏览器中,完成AJAX调用后,将使用AJAX调用中的信息更新UI。 任务完成。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM