加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > asp.Net > 正文

ASP.NET异步任务 – 如何使用Page.RegisterAsyncTask使用WebClie

发布时间:2020-12-16 09:36:27 所属栏目:asp.Net 来源:网络整理
导读:我要为我所工作的网站做的一项常见任务如下: 从某些第三方API下载数据 以某种方式处理数据 在页面上显示结果 我最初使用WebClient.DownloadStringAsync并对结果进行处理.但是我发现DownloadStringAsync并不尊重AsyncTimeout参数,一旦我做了一些关于它是如何
我要为我所工作的网站做的一项常见任务如下:

>从某些第三方API下载数据
>以某种方式处理数据
>在页面上显示结果

我最初使用WebClient.DownloadStringAsync并对结果进行处理.但是我发现DownloadStringAsync并不尊重AsyncTimeout参数,一旦我做了一些关于它是如何工作的阅读,我就会有所期待.

我最终调整了the example on how to use PageAsyncTask的代码来使用DownloadString() – 请注意,这是同步版本.这可能没问题,因为任务现在是异步的.任务现在正常超时,我可以通过PreRender()时间获取数据 – 我可以很容易地对其进行泛化并将其放在我需要此功能的任何页面上.

但是我只是担心它不是’干净’.完成任务时不会通知页面,就像DownloadStringAsync方法那样 – 我只需要在我的PreRender事件结尾处挖掘结果(存储在类中的字段中).

有没有办法让Webclient的Async方法与RegisterPageTask一起使用,或者是我能做的最好的辅助类?

注意:没有MVC – 这是vanilla asp.net 4.0.

解决方法

如果您希望在异步任务完成时调用页面上的事件处理程序,则只需要挂起一个.要扩展您链接的MSDN“如何”文章:

>修改“SlowTask”类以包含一个事件,例如 – public event EventHandler Finished;
>在“OnEnd”方法中调用EventHandler,如 – if(Finished!= null)
????????{
????????????完成(this,EventArgs.Empty);
????????}
>在页面中为SlowTask.Finished注册一个事件处理程序,例如 – mytask.Finished = new EventHandler(mytask_Finished);

关于ExecuteRegisteredAsyncTasks()是阻塞调用,这仅基于我的经验.它没有在MSDN-http://msdn.microsoft.com/en-us/library/system.web.ui.page.executeregisteredasynctasks.aspx中明确记录

也就是说,只要它没有返回WaitHandle或类似的东西,它就不是那么实用,但它是阻塞调用.如果它没有阻塞管道,则会在异步任务完成之前呈现并返回到客户端,这使得将任务结果返回给客户端有点困难.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读