Tag: async ctp

为什么存在async关键字

通过频道浏览9 msdnvideo我发现了以下未答复的评论,并希望有人可以解释它? 我没有得到asynchronous关键字的重点。 为什么不只是在方法返回Task时只允许await关键字,就像迭代器可以返回任何返回IEnumerable的方法一样。 我相信有一个很好的理由,我只想明白为什么上述build议是不可能的。

asynchronousTask.WhenAll超时

有没有在新的asynchronousdotnet 4.5库的方式来设置Task.WhenAll方法的超时。 我想获取几个来源,并在5秒后停止,并跳过未完成的来源。

不能等待asynchronouslambda

考虑到这一点, Task task = new Task (async () =>{ await TaskEx.Delay(1000); }); task.Start(); task.Wait(); 调用task.Wait()不会等待任务完成,并立即执行下一行,但如果将asynchronouslambdaexpression式包装到方法调用中,则代码将按预期工作。 private static async Task AwaitableMethod() { await TaskEx.Delay(1000); } 然后(根据svick评论更新) await AwaitableMethod();

返回void和返回一个Task有什么区别?

在查看各种C#asynchronousCTP示例时,我看到一些返回voidasynchronous函数,以及其他返回非通用Taskasynchronous函数。 我可以看到为什么在asynchronous操作完成时返回一个Task<MyType>对于将数据返回给调用者是有用的,但是我所看到的具有返回typesTask的函数永远不会返回任何数据。 为什么不回报void ?

在.net 4上使用asynchronous等待

我正在开始创build一个应用程序,它将从C#5的asynchronous等待function中获益。 但是我不确定要使用哪个版本的VS和asynchronous运行时。 看看OSstream行榜,我需要再支持Windows XP三年左右。 它看起来像.net 4.5只运行在较新版本的Windows,所以我需要的目标.net 4.0。 开发机器使用Windows 7,所以使用更新版本的VS不是问题。 现在我需要先select一个编译器来做到这一点: VS2010与AsyncCTP VS2012预览(最后一次到达),将目标设置为.net 4.0 单声道(看起来像2.12有asynchronous等待,我更喜欢/用于作为IDE的MonoDevelop VS) 哪一个有更less的代码漏洞? 看看Jon Skeet的博客 ,VS2012 Preview使用了一个比CTP更好的代码生成器。 更重要的是使用哪个运行时? VS2012是否包含可用于.net 4的可再发行的asynchronous运行时? 我设法通过引用AsyncCTP运行时来预览编译代码。 但是由于CTP具有奇怪的许可条件,这看起来不是一个好的长期解决scheme。 或者我应该使用第三方实施? 也许mono有一个? 为了发布这个库,我比较喜欢简单地将dll放在与应用程序相同的目录中,而不是某种安装程序。 如果我的二进制文件在mono + Linux / MacOS上没有变化,我也会喜欢它。 所以运行时应该与任何单声道(可能是2.12)内置的兼容,或者允许在非Windows操作系统上使用。

asynchronous是否等待关键字相当于一个ContinueWith lambda?

有人可以请客气,以确认我是否已经正确理解Async等待关键字? (使用CTP版本3) 到目前为止,我已经计算出,在方法调用之前插入await关键字本质上是做了两件事情,它创build了一个立即返回和B.它创build了一个“继续”,在完成asynchronous方法调用时被调用。 在任何情况下,延续是该方法的代码块的其余部分。 所以我想知道的是,这两个代码在技术上是否等价,如果是这样,这基本上是否意味着await关键字与创buildContinueWith 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()) .ContinueWith((success) => MessageBox.Show(success.Result ? […]

如何从getter或setter调用asynchronous方法?

什么是从C#中的getter或setter调用asynchronous方法最优雅的方式? 这里有一些伪代码来帮助解释我自己。 async Task<IEnumerable> MyAsyncMethod() { return await DoSomethingAsync(); } public IEnumerable MyList { get { //call MyAsyncMethod() here } }

如何限制并发asynchronousI / 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请求。 有没有简单的方法来限制这些asynchronousHTTP请求的并发量? 因此,在任何时候都不会有超过20个网页被下载。 如何以最有效的方式做到这一点?