Questions tagged «async-ctp»

12
如何从getter或setter调用异步方法?
从C#中的getter或setter调用异步方法的最优雅的方法是什么? 这是一些伪代码来帮助解释自己。 async Task<IEnumerable> MyAsyncMethod() { return await DoSomethingAsync(); } public IEnumerable MyList { get { //call MyAsyncMethod() here } }
223 c#  async-ctp 

5
在.net 4上使用async-await
我目前正在开始创建一个将从C#5的async-await功能中受益匪浅的应用程序。但是我不确定要使用哪个版本的VS和异步运行时。 查看OS流行度图表,我需要再支持Windows XP三年左右。看起来.net 4.5仅在更新版本的Windows上运行,因此我需要定位.net 4.0。开发机器使用Windows 7,因此使用较新版本的VS没问题。 现在,我需要首先选择一个编译器来执行此操作: 带有AsyncCTP的VS2010 VS2012预览版(到达后即为最终版本),将目标设置为.net 4.0 Mono(看起来像2.12具有async-await,我更喜欢/ am习惯于使用VS取代MonoDevelop作为IDE) 哪一个代码错误较少?在Jon Skeet的博客中,VS2012 Preview使用的永远不会是CTP的代码生成器。 更重要的是要使用哪个运行时? VS2012是否包含可与.net 4一起使用的可重新分发的异步运行时? 通过引用AsyncCTP运行时,我设法通过预览来编译代码。但是,由于CTP具有奇怪的许可条件,因此这似乎不是一个好的长期解决方案。 还是应该使用第三方实现?也许单声道有一个? 为了分发库,我更喜欢将dll与应用程序放在同一目录中,而不是某种安装程序。 如果我的二进制文件可以在mono + Linux / MacOS上运行而无需更改,我也很喜欢。因此,运行时应该与内置的mono(可能为2.12)兼容,或者允许在非Windows操作系统上使用。


13
如何限制并发异步I / O操作的数量?
// let's say there is a list of 1000+ URLs string[] urls = { "http://google.com", "http://yahoo.com", ... }; // now let's send HTTP requests to each of these URLs in parallel urls.AsParallel().ForAll(async (url) => { var client = new HttpClient(); var html = await client.GetStringAsync(url); }); 这是问题所在,它会同时启动1000多个Web请求。有没有简单的方法来限制这些异步http请求的并发数量?这样,在任何给定时间下载的网页都不会超过20个。如何以最有效的方式做到这一点?

2
Async await关键字是否等同于ContinueWith lambda?
有人可以请我确认我是否正确理解Async await关键字吗?(使用CTP版本3) 到目前为止,我已经知道,在方法调用之前插入await关键字实际上可以完成两件事:A。它创建立即返回,B。它创建一个“ continuation”,在异步方法调用完成时调用。无论如何,延续是该方法的代码块的其余部分。 所以我想知道的是,这两个代码在技术上是否等效,如果是,这是否基本上意味着await关键字与创建ContinueWith Lambda相同(即,它基本上是一个编译器的快捷方式)?如果没有,有什么区别? bool Success = await new POP3Connector( "mail.server.com", txtUsername.Text, txtPassword.Text).Connect(); // At this point the method will return and following code will // only be invoked when the operation is complete(?) MessageBox.Show(Success ? "Logged In" : "Wrong password"); VS (new POP3Connector( "mail.server.com", txtUsername.Text, txtPassword.Text ).Connect()) …

3
为什么要使用异步请求而不是使用更大的线程池?
在荷兰的Techday期间,Steve Sanderson进行了有关C#5,ASP.NET MVC 4和异步Web的演讲。 他解释说,当请求需要很长时间才能完成时,线程池中的所有线程都变得繁忙,因此新的请求必须等待。服务器无法处理负载,一切都变慢了。 然后,他展示了异步Web请求的使用如何提高性能,因为随后将工作委派给另一个线程,并且线程池可以快速响应新的传入请求。他甚至对此进行了演示,并显示出50个并发请求首先耗时50 * 1s,但是异步行为总共仅1,2 s。 但是看到这个之后,我仍然有一些疑问。 为什么我们不能只使用更大的线程池?是不是不是使用async / await来使另一个线程变慢,而是仅仅从一开始就增加了线程池?这不像我们运行的服务器突然获得更多线程或其他东西吗? 来自用户的请求仍在等待异步线程完成。如果池中的线程正在执行其他操作,那么“ UI”线程如何保持繁忙?史蒂夫(Steve)提到了一些“知道何时完成的智能内核”。这是如何运作的?
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.