问题标签 [async-await]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
9 回答
32571 浏览

c# - 在 catch 块中等待

我有以下代码:

基本上我想从一个 URL 下载,当它失败并出现异常时,我想从另一个 URL 下载。当然,两者都是异步的。但是代码无法编译,因为

错误 CS1985:不能在 catch 子句的主体中等待

好的,无论出于何种原因,它都被禁止,但这里正确的代码模式是什么?

编辑:

好消息是C# 6.0 可能会在 catch 和 finally 块中允许 await 调用

0 投票
2 回答
981 浏览

c# - 为什么异步 CTP 表现不佳?

我真的不明白为什么await,也没有像他们应该的那样async提高我的代码的性能。

尽管持怀疑态度,但我认为编译器应该重写我的方法,以便并行完成下载......但似乎这实际上并没有发生。
确实意识到这一点await并且async不创建单独的线程;但是,操作系统应该并行进行下载,并在原始线程中回调我的代码——不是吗?

我是否使用async不当await?使用它们的正确方法是什么?

代码:

输出:

0 投票
2 回答
8067 浏览

c# - 什么是异步和等待,什么时候在 Windows 开发中使用它们?

我一直看到 Silverlight 中使用的关键字 async 但想知道是否有人对它是什么以及何时使用它及其好处进行了假解释。如果您能解释一下,将不胜感激。谢谢你。

0 投票
6 回答
9461 浏览

c# - 如何在处理当前表单时显示表单

我在 Visual Studio 2008 框架 3.5 中有一个 Windows 应用程序,我需要并发等待窗口,其中一个进程正在一个窗口中进行,并且在该窗口上出现另一个表单,其中包含一些移动图像(动画),就像 .gif 图像一样。

我有 2 个表单,在 form2 上,单击按钮我执行了一个漫长的过程,我希望我的“frmWait”出现在屏幕上,而 form2 上的过程正在进行并在完成时消失。当我的“frmWait”出现时,用户应该无法访问表单 2。

我的代码在这里。表格 2

在SomeWork过程中有一个我写过的for循环,但实际上在程序中它是在sqlserver中执行的数据库命令,当查询在服务器上执行时,我的主程序工作暂停,直到服务器完成工作,然后程序获得执​​行指针,同时,软件好像被挂了。

0 投票
2 回答
1103 浏览

xamarin.android - monodroid 是否支持异步等待?

我在 wp7 中编写了一个应用程序,用 await 处理大部分异步任务。我被要求考虑将其移植到 Android 上。幸运的是,我手头有 MonoDroid,所以我不必掸掸我的 Java。但我刚刚意识到,我不能重用我的代码,因为 MonoDroid 是最新的,直到 .NET 4.0 不包括异步编译器。

我从 12 月发现这篇文章,说 MonoDroid 很快就会有异步。什么时候有消息?

0 投票
2 回答
1083 浏览

c# - 改进Task代码以实现异步等待

我正在创建一个任务,然后分配一个等待任务完成的线程,然后修改 UI。

这是好习惯吗?

0 投票
1 回答
2091 浏览

c# - 可等待的 lambda

关键监听器中的动态评估

这个 Lambda 应该在每一行上等待

  • 即客户端代码将提供对同一参数的一系列评估,key期望每一行评估都将被等待,以便在 1:A 2:W 3:A 的一系列 keyup 事件之后调用 SomeResponse()
  • 显然目前这永远不会发生,因为该方法一直运行到最后并且key == Key.W永远不会是真的
  • 这可能是不可能的,但是有没有办法让方法调用自动从下一行返回,如果它评估为假,但返回它直到该行评估为真,然后一直到之后的行,然后到在那之后直到方法结束?
  • 即是否有一种简单的方法来提供这种可等待的 lambda 表达式?
0 投票
5 回答
66817 浏览

c# - 在 .net 4 上使用 async-await

我目前正在开始创建一个应用程序,该应用程序将从 C# 5 的 async-await 功能中获益良多。但我不确定要使用哪个版本的 VS 和异步运行时。

查看操作系统流行度图表,我需要再支持 Windows XP 三年左右。看起来 .net 4.5 只能在较新版本的 Windows 上运行,所以我需要以 .net 4.0 为目标。开发机器使用的是Windows 7,所以使用较新版本的VS是没有问题的。

现在我需要首先选择一个编译器来执行此操作:

  • VS2010 带 AsyncCTP
  • VS2012 预览版(以及最终版),将目标设置为 .net 4.0
  • Mono(看起来 2.12 有 async-await,我更喜欢/习惯于 VS 而不是 MonoDevelop 作为 IDE)

哪一个的代码生成错误更少?查看Jon Skeet 的博客,VS2012 预览版使用的代码生成器从未使用过 CTP。

更重要的是要使用哪个运行时?

VS2012 是否包含可重新分发的异步运行时以与 .net 4 一起使用?

通过引用 AsyncCTP 运行时,我设法通过预览编译代码。但由于 CTP 有奇怪的许可条件,这看起来不是一个好的长期解决方案。

还是我应该使用第三方实现?也许单声道有一个?

对于分发库,我更喜欢简单地将 dll 放在与应用程序相同的目录中,而不是某种安装程序。

如果我的二进制文件可以在 mono+Linux/MacOS 上不做任何更改,我也会喜欢它。因此,运行时应该与任何内置的单声道(可能是 2.12)兼容,或者允许在非 Windows 操作系统上使用。

0 投票
6 回答
11915 浏览

asp.net - 在 IHttpAsyncHandler 中使用 Task 或 async/await

自从我想添加线程开始编写 ASP.NET 应用程序以来,有 3 种简单的方法可以在我的 ASP.NET 应用程序中完成线程:

  • 使用System.Threading.ThreadPool.
  • 使用自定义委托并调用其BeginInvoke方法。
  • 在类的帮助下使用自定义线程System.Threading.Thread

前两种方法提供了一种为您的应用程序启动工作线程的快速方法。但不幸的是,它们会损害应用程序的整体性能,因为它们使用 ASP.NET 用来处理 HTTP 请求的同一池中的线程

然后我想用一个新的 Task 或者 async/await 来写IHttpAsyncHandler. 你可以找到一个例子是 Drew Marsh 在这里解释的:https ://stackoverflow.com/a/6389323/261950

我的猜测是,使用 Task 或 async/await 仍然会消耗 ASP.NET 线程池中的线程,并且出于明显的原因我不想要。

您能否告诉我是否可以在后台线程上使用 Task (async/await),例如使用System.Threading.Thread而不是线程池

在此先感谢您的帮助。

托马斯

0 投票
1 回答
1965 浏览

c# - 使用 Async CTP 同时下载 HTML 页面

尝试使用异步 CTP 编写 HTML 爬虫时,我一直不知道如何编写无递归方法来完成此任务。

这是我到目前为止的代码。

但显然这并不像我希望的那样起作用,因为在Parallel.ForEach执行第一次(也是唯一一次迭代)时,我只有一项。我能想到的最简单的ForEach递归方法,但我不能(我不认为)这样做,因为我会很快用完堆栈空间。

任何人都可以指导我如何重组此代码,以创建我将描述为添加项目的递归延续,直到MaxStackSize达到或系统内存不足?