豪门怨首席的落跑小妖精,湖南卫视在线直播观看今晚,沈蔓歌
在第 1 部分和第 2 部分中,建立了 weatherdatasource 控件,该控件针对 weather.com(英文)所提供的 xml api 来运行,使用 webrequest 和 webresponse 来通过 http 访问数据。迄今为止,均是同步访问该服务。因此,页面处理被阻止,直到 web 请求完成为止。此方法对于测试页面是有效的,在小站点上也可能有效,但是在接收大量通信流量的站点上则会惨败;例如门户页面,天气模块在其中可能非常常见。public abstract class datasourceview { public virtual void select(datasourceselectarguments arguments, datasourceviewselectcallback callback); protected abstract ienumerable executeselect( datasourceselectarguments arguments); ... } |
public abstract class asyncdatasourcecontrol : datasourcecontrol, iasyncdatasource { private bool _performasyncdataaccess; protected asyncdatasourcecontrol() { _performasyncdataaccess = true; } public virtual bool performasyncdataaccess { get; set; } bool iasyncdatasource.isasync { get { return _performasyncdataaccess && page.isasync; } } } public abstract class asyncdatasourceview : datasourceview { protected abstract iasyncresult beginexecuteselect( datasourceselectarguments arguments, asynccallback asynccallback, object asyncstate); protected abstract ienumerable endexecuteselect( iasyncresult asyncresult); protected override ienumerable executeselect( datasourceselectarguments arguments) { //实现从 datasourceview 中继承的 //抽象 executeselect 方法, //方法是使用 beginexecuteselect 和 endexecuteselect, //以便通过阻止来 //进行同步数据访问。 } private iasyncresult onbeginselect(object sender, eventargs e, asynccallback asynccallback, object extradata); private void onendselect(iasyncresult asyncresult); public override void select(datasourceselectarguments arguments, datasourceviewselectcallback callback) { if (_owner.isasync) { //使用 onbeginselect 和 onendselect //作为 begineventhandler 和 endeventhandler 方法, //来调用 page.registerasynctask, //以指明需要 //进行异步工作。这些方法将依次 //调用特定的 //数据源实现,方法是调用 //已在此类中引入的 //抽象 beginexecuteselect 和 endexecuteselect //方法。 } else { //执行同步数据访问 base.select(arguments, callback); } } ... } |
public class asyncweatherdatasource : asyncdatasourcecontrol { //与 weatherdatasource 相同 } private sealed class asyncweatherdatasourceview : asyncdatasourceview { private asyncweatherdatasource _owner; private weatherservice _weatherservice; public asyncweatherdatasourceview(asyncweatherdatasource owner, string viewname) : base(owner, viewname) { _owner = owner; } protected override iasyncresult beginexecuteselect(datasourceselectarguments arguments, asynccallback asynccallback, object asyncstate) { arguments.raiseunsupportedcapabilitieserror(this); string zipcode = _owner.getselectedzipcode(); if (zipcode.length == 0) { return new synchronousasyncselectresult(/* selectresult */ null, asynccallback, asyncstate); } _weatherservice = new weatherservice(zipcode); return _weatherservice.begingetweather(asynccallback, asyncstate); } protected override ienumerable endexecuteselect(iasyncresult asyncresult) { synchronousasyncselectresult syncresult = asyncresult as synchronousasyncselectresult; if (syncresult != null) { return syncresult.selectresult; } else { weather weatherobject = _weatherservice.endgetweather(asyncresult); _weatherservice = null; if (weatherobject != null) { return new weather[] { weatherobject }; } } return null; } } |
如对本文有疑问,请在下面进行留言讨论,广大热心网友会与你互动!! 点击进行留言回复
Blazor server side 自家的一些开源的, 实用型项目的进度之 CEF客户端
.NET IoC模式依赖反转(DIP)、控制反转(Ioc)、依赖注入(DI)
vue+.netcore可支持业务代码扩展的开发框架 VOL.Vue 2.0版本发布
网友评论